这两天在网上看到一个帖子讨论关于有些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 @end13 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 - 155 speed:speed56 range:range57 shakeDirection:shakeDirection58 currentTimes:currentTimes + 159 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 @end12 13 @implementation ViewController14 15 - (void)viewDidLoad {16 [super viewDidLoad];17 [self setUpShowTextField];18 [self setUpBtn];19 }20 21 #pragma mark - show22 - (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 - btn36 - (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的抖动效果 别的没试~~~
新手渣 如果哪里有些错的地方 求大神指点!!!
原标题:IOS中对于一些控件的抖动效果
关键词:IOS