左右抖动的动画效果可以应用在登陆界面,当密码或账户输错的时候,可以加入这个效果,也是不错的,虽然low点,但起码也是一种效果.嘿嘿...废话不多说直接上代码.
一、自己创建一个UIView的分类吧,这里我就不多说真么创建了
typedefvoid(^DyAnimationFinished)(void); //创建一个完成后的代码块
@interfaceUIView (SimpleAnimation)
-(void) shakeWithFinished:(DyAnimationFinished)finished;
@end
@implementationUIView (SimpleAnimation)
// 三个方法实现
/**左右摇摆shake*/
-(void) shakeWithFinished:(DyAnimationFinished)finished{
floatshakeMax_x = 10;//一次最大摇摆x坐标
floattime = 0.15;
__weaktypeof(self)weakSelf = self;
[selfsetMoveX:-shakeMax_xdrution:timefinished:^{ //先往左移动10
[weakSelfsetMoveX:shakeMax_x*2drution:timefinished:^{ //在往有移动20,相当在最原来的位置往右移动了10
[weakSelfsetMoveX:-shakeMax_x*2drution:timefinished:^{ //在往左移动20,相当于在上面的位置往左移动了10
[weakSelfsetMoveX:shakeMax_xdrution:timefinished:^{
if(finished) {
finished();
}
}];
}];
}];
}];
}
//重新设置x坐标
-(void) setMoveX:(CGFloat)x drution:(NSTimeInterval)time finished:(DyAnimationFinished)finished{
//调用重新设置此控件frame的方法,原来的x加上要移动的x
[selfsetX:(self.frame.origin.x+ x)drution:timefinished:finished];
}
//重新设置此控件frame的方法
-(void) setX:(CGFloat)total_x drution:(NSTimeInterval)time finished:(DyAnimationFinished)finished{
[UIViewanimateWithDuration:timeanimations:^{
CGRectframe = self.frame;
frame.origin.x = total_x;
self.frame = frame;
}completion:^(BOOLf) {
if(finished) {
finished();
}
}];
}
@end
二、这里我在补充一个小技巧,也是适用于登陆或是有输入框的界面的技巧:监听TextField的变化来改变按钮的可点击状态.代码如下:
1、[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(textDidChange)name:UITextFieldTextDidChangeNotificationobject:nil];
2、-(void) textDidChange{
if(_text_user.text.length == 0) {
_button.backgroundColor = [UIColor lightGrayColor];
_button.userInteractionEnabled=NO;
}else{
_button.backgroundColor= [UIColor orangeColor];
_button.userInteractionEnabled = YES;
}
}
//记得移除监听
-(void) dealloc{
[[NSNotificationCenterdefaultCenter] removeObserver:self]; }
分享出来大家一起来学习!有什么更好的想法可以@我,一起进步!谢谢