标签:
uiview动画用到的一些属性:
frame | |
bounds | |
center | |
transform | |
alpha | |
backgroundcolor | |
contentstretch |
在用oc做uiview的frame修改时,会出现以下错误:
事例如下:
[UIView animateWithDuration:0.3 animations:^{ _myView.frame.origin.x += 100; }];
原因是:self.view.frame
是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访问属性只是一种语法糖,所以self.view.frame
这句话会被转换成:[[self view] frame]。也就是说,实际上这是消息传递。而frame属性是一个CGRect结构,所以frame.size.height
是C语言的语法,就是访问CGRect结构中的size字段,同样,height是CGSize结构的一个字段。而Objective-C只是对C语言的一个扩展,所以,上面这句话会被转成C语言的函数调用形式。而在C语言里,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。所以,解决办法就是,用一个临时变量保存这个函数的返回值,修改这个临时变量,然后再赋给frame:
[UIView animateWithDuration:0.3 animations:^{ CGRect temp = _myView.frame; temp.origin.x += 100; _myView.frame = temp; }];
效果图:
上面这个方法基本上实现了视图的右移,也就是修改了view的frame时使用。
2.UIViewAnimationOptions的使用
它可以配置三种类型:
1).动画控制相关
LayoutSubviews 提交动画的时候布局子控件,表示子控件和父控件一同动画
AllowUserInteraction 动画时允许用户交流
BeginFromCurrentState 从当前状态开始动画
Repeat 动画无限重复
Autoreverse 执行动画回路,设置动画无限重复
OverrideInheritedDuration 忽略外层动画的嵌套时间
OverrideInheritedCurve 忽略外层动画的嵌套时间变化曲线
OverrideInheritedContent 通过改变属性和重会实现动画效果,如果key没有提交动画将使用快照
ShowHideTransitionViews 用显隐的方式替代添加移除图层的动画效果
OverrideInheritedOptions 忽略嵌套继承的选项
2).时间曲线相关
CurveEasyIn CurveEasyInOut CurveEasyOut CurveLinear
由快到慢
3).转场效果相关:比如:两个controller的切换
TransitionNone 无转场
TransitionFlipFromLeft 从左往右的翻转
TransitionFlipFromRight 从右往左的翻转
TransitionCurlUp 上卷转场
TransitionCurlDown 下卷转场
TransitionCrossDissolve 转场交叉消失
TransitionFlipFromTop 转场从上翻转
TransitionFlipFromButton 转场从下翻转
使用repeat和CurveLinear实现:
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat animations:^{ CGRect temp = _myView.frame; temp.origin.x += 100; _myView.frame = temp; } completion:nil];
效果图:
3.使用beginCommitAnimate来实现动画
改变背景颜色:
//1.声明动画开始并配置动画属性 [UIView beginAnimations:@"text" context:nil]; [UIView setAnimationDuration:1.0]; [UIView setAnimationRepeatCount:8]; [UIView setAnimationRepeatAutoreverses:YES]; //2.操作视图 self.myView.backgroundColor = [UIColor blueColor]; //3.提交动画 [UIView commitAnimations];
效果图:
3.Nest(内层嵌套动画)
内层动画默认继承外层动画的一些属性(duration,curve等),因此,在设置内层动画的时候,可以设置如下的属性,使得内层动画独立运作
OverrideInheritedCurve OverrideInheritedDuration OverrideInheritedOperations
重写继承的时间曲线 重写继承的时间 重写继承的属性
[UIView animateWithDuration:3.0 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{ CGRect temp = _myView.frame; temp.origin.x += 100; _myView.frame = temp; [UIView animateWithDuration:2.0 delay:0.1 options:UIViewAnimationOptionOverrideInheritedCurve|UIViewAnimationOptionCurveEaseOut|UIViewAnimationOptionOverrideInheritedDuration animations:^{ CGRect temp = _mySecondView.frame; temp.origin.x += 100; _mySecondView.frame = temp; } completion:nil]; } completion:nil];
效果图:
标签:
原文地址:http://www.cnblogs.com/moxuexiaotong/p/4964165.html