zoukankan      html  css  js  c++  java
  • IOS中对于一些控件的抖动效果

    这两天在网上看到一个帖子讨论关于有些app 输入账密时候 错误的话会有抖动效果出现,然后自己琢磨了下如何实现,下面上代码!!!

    首先 写一个UIView的分类

     

     1 #import <UIKit/UIKit.h>
     2 
     3 typedef NS_ENUM(NSInteger, QHLDirection) {
     4     QHLDirectionHorizontal,
     5     QHLDirectionVertical
     6 };
     7 @interface UIView (QHLShakes)
     8 - (void)shakeWithShakeDirection:(QHLDirection)shakeDirection;
     9 - (void)shakeWithTimes:(NSInteger)times shakeDirection:(QHLDirection)shakeDirection;
    10 - (void)shakeWithTimes:(NSInteger)times speed:(CGFloat)speed shakeDirection:(QHLDirection)shakeDirection;
    11 - (void)shakeWithTimes:(NSInteger)times speed:(CGFloat)speed range:(CGFloat)range shakeDirection:(QHLDirection)shakeDirection;
    12 @end
    13 
    14 
    15 
    16 #import "UIView+QHLShakes.h"
    17 
    18 @implementation UIView (QHLShakes)
    19 - (void)shakeWithShakeDirection:(QHLDirection)shakeDirection {
    20     [self shakeWithTimes:10 speed:0.05 range:5 shakeDirection:shakeDirection];
    21 }
    22 
    23 - (void)shakeWithTimes:(NSInteger)times shakeDirection:(QHLDirection)shakeDirection {
    24     [self shakeWithTimes:times speed:0.05 range:5 shakeDirection:shakeDirection];
    25 }
    26 
    27 - (void)shakeWithTimes:(NSInteger)times speed:(CGFloat)speed shakeDirection:(QHLDirection)shakeDirection {
    28     [self shakeWithTimes:times speed:speed range:5 shakeDirection:shakeDirection];
    29 }
    30 
    31 - (void)shakeWithTimes:(NSInteger)times speed:(CGFloat)speed range:(CGFloat)range shakeDirection:(QHLDirection)shakeDirection {
    32     [self viewShakesWithTiems:times speed:speed range:range shakeDirection:shakeDirection currentTimes:0 direction:1];
    33 }
    34 /**
    35  *  @param times          震动的次数
    36  *  @param speed          震动的速度
    37  *  @param range          震动的幅度
    38  *  @param shakeDirection 哪个方向上的震动
    39  *  @param currentTimes   当前的震动次数
    40  *  @param direction      向哪边震动
    41  */
    42 - (void)viewShakesWithTiems:(NSInteger)times speed:(CGFloat)speed range:(CGFloat)range shakeDirection:(QHLDirection)shakeDirection currentTimes:(NSInteger)currentTimes direction:(int)direction{
    43     
    44     [UIView animateWithDuration:speed animations:^{
    45         self.transform = (shakeDirection == QHLDirectionHorizontal)? CGAffineTransformMakeTranslation(range * direction, 0):CGAffineTransformMakeTranslation(0, range * direction);
    46     } completion:^(BOOL finished) {
    47         if (currentTimes >= times) {
    48             [UIView animateWithDuration:speed animations:^{
    49                 self.transform = CGAffineTransformIdentity;
    50             }];
    51             return;
    52         }
    53 #pragma mark - 循环到times == currentTimes时候 会跳出该方法
    54         [self viewShakesWithTiems:times - 1
    55                                  speed:speed
    56                                  range:range
    57                         shakeDirection:shakeDirection
    58                           currentTimes:currentTimes + 1
    59                              direction:direction * -1];
    60     }];
    61 }
    62 @en
    然后在ViewController.m中

    先导入头文件 #import "UIView+QHLShakes.h"
     1 #import "ViewController.h"
     2 #import "UIView+QHLShakes.h"
     3 
     4 #define QHLFont [UIFont boldSystemFontOfSize:17]
     5 #define QHLColor [UIColor purpleColor]
     6 #define QHLCGColor [QHLColor CGColor]
     7 
     8 @interface ViewController ()
     9 @property (nonatomic, strong) UITextField *show;
    10 @property (nonatomic, strong) UISegmentedControl *directBtn;
    11 @end
    12 
    13 @implementation ViewController
    14 
    15 - (void)viewDidLoad {
    16     [super viewDidLoad];
    17     [self setUpShowTextField];
    18     [self setUpBtn];
    19 }
    20 
    21 #pragma mark - show
    22 - (void)setUpShowTextField {
    23     UITextField *show = [[UITextField alloc] init];
    24     show.frame = CGRectMake(30, 360, 270, 30);
    25     show.textAlignment = NSTextAlignmentCenter;
    26     show.text = @"你是猪吗?";
    27     show.textColor = QHLColor;
    28     show.layer.cornerRadius = 5;
    29     show.layer.masksToBounds = YES;
    30     show.layer.borderWidth = 2.0;
    31     show.layer.borderColor = QHLCGColor;
    32     self.show = show;
    33     [self.view addSubview:show];
    34 }
    35 #pragma mark - btn
    36 - (void)setUpBtn {
    37     UIButton *btn = [[UIButton alloc] init];
    38     btn.layer.borderColor = QHLCGColor;
    39     btn.frame = CGRectMake(30, 430, 270, 30);
    40     btn.layer.borderWidth = 2.0;
    41     btn.layer.cornerRadius = 5;
    42     btn.layer.masksToBounds = YES;
    43     [btn setTitle:@"点我呀" forState:UIControlStateNormal];
    44     [btn setTitle:@"猪是你" forState:UIControlStateHighlighted];
    45     [btn setTitleColor:QHLColor forState:UIControlStateNormal];
    46     [self.view addSubview:btn];
    47     
    48     [btn addTarget:self action:@selector(btnDidClick) forControlEvents:UIControlEventTouchUpInside];
    49 }
    50 #pragma mark - btn 点击事件
    51 - (void)btnDidClick {
    52     [self.show shakeWithTimes:20 speed:0.05 range:3 shakeDirection:(self.directBtn.selectedSegmentIndex == 0)?QHLDirectionHorizontal:QHLDirectionVertical];
    53 }
    54 @end

    在 - (void)viewDidLoad {} 中添加一个textField和button,然后设置相关的属性,并给button添加点击事件

     

    当点击事件触发的时候,textField抖动!!!!

     

     

    自己试了textField 和button的抖动效果 别的没试~~~ 

    如果哪里有些错的地方 求大神指点!!!

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/qhlbk/p/5093406.html
Copyright © 2011-2022 走看看