iOS - UIView的动画

程序员 2024-10-4 22:22:20 65 0 来自 中国
一、位置动画

    UIView *viewA = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];    [self.view addSubview:viewA];    viewA.backgroundColor = [UIColor orangeColor];        [UIView animateWithDuration:2 animations:^{        viewA.frame = CGRectMake(viewA.frame.origin.x, 400, viewA.bounds.size.width, viewA.bounds.size.height);    }];二、透明度、颜色动画

    //颜色动画    [UIView animateWithDuration:2 animations:^{        viewA.backgroundColor = [UIColor greenColor];    }];        //透明度    [UIView animateWithDuration:2 animations:^{        viewA.alpha = 0.3;    }];三、缩放动画

    [UIView animateWithDuration:4 animations:^{        viewA.transform = CGAffineTransformMakeScale(2, 3);    }];CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)两个参数,代表 x 和 y 方向缩放倍数
CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);三个参数,第一个为要举行变更的矩阵
区别:
CGAffineTransformMakeScale 是对单位矩阵举行缩放。
CGAffineTransformScale 是对第一个参数的矩阵举行缩放
比如已经对一个 view 缩放 0.5,还想在这个底子上继承缩放 0.5,那么就把这个 view.transform 作为第一个参数传到 CGAffineTransformScale 内里,缩放之后的 view 则变为 0.25(CGAffineTransformScale(view.transofrm,0.5,0.5))。如果用 CGAffineTransformMakeScale 方法,那么这个 view 仍然是缩放 0.5(CGAffineTransformMakeScale(0.5,0.5))。
四、旋转动画

    [UIView animateWithDuration:4 animations:^{        viewA.transform = CGAffineTransformRotate(viewA.transform, M_PI);    }];五、重复动画、延时动画

    [UIView animateWithDuration:2 delay:0.35 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{        viewA.transform = CGAffineTransformRotate(viewA.transform, M_PI);    } completion:^(BOOL finished) {            }];duration: 动画时长
delay: 决定了动画在延伸多久之后实行
options:用来决定动画的展示方式
animations:转化成动画表现的代码
completion:动画竣事后实行的代码块
options类型
    UIViewAnimationOptionLayoutSubviews:动画过程中包管子视图跟随运动    UIViewAnimationOptionAllowUserInteraction:动画过程中答应用户交互。    UIViewAnimationOptionBeginFromCurrentState:全部视图从当前状态开始运行。    UIViewAnimationOptionRepeat:重复运举措画。    UIViewAnimationOptionAutoreverse :动画运行到竣事点后仍然以动画方式回到初始点。    UIViewAnimationOptionOverrideInheritedDuration:忽略嵌套动画时间设置。    UIViewAnimationOptionOverrideInheritedCurve:忽略嵌套动画速率设置。    UIViewAnimationOptionAllowAnimatedContent:动画过程中重绘视图(留意:仅仅实用于转场动画)。    UIViewAnimationOptionShowHideTransitionViews:视图切换时直接隐蔽旧视图、表现新视图,而不是将旧视图从父视图移除(仅仅实用于转场动画    UIViewAnimationOptionOverrideInheritedOptions :不继承父动画设置或动画类型。    UIViewAnimationOptionTransitionNone:没有动画效果。    UIViewAnimationOptionTransitionFlipFromLeft :从左侧翻转效果。    UIViewAnimationOptionTransitionFlipFromRight:从右侧翻转效果。    UIViewAnimationOptionTransitionCurlUp:向后翻页的动画过渡效果。    UIViewAnimationOptionTransitionCurlDown :向前翻页的动画过渡效果。    UIViewAnimationOptionTransitionCrossDissolve:旧视图溶解消散表现下一个新视图的效果。    UIViewAnimationOptionTransitionFlipFromTop :从上方翻转效果。        UIViewAnimationOptionTransitionFlipFromBottom:从底部翻转效果。    UIViewAnimationOptionCurveEaseInOut:动画效果先缓后渐渐加快。    UIViewAnimationOptionCurveEaseIn :动画效果渐渐变慢。    UIViewAnimationOptionCurveEaseOut:动画效果渐渐加快。    UIViewAnimationOptionCurveLinear :动画效果匀速实行(默认)。六、留意

在利用 Masonry 库的时间举行 [UIView animateWithDuration:2 animations:^{}]; 函数做动画效果时,必须要在该函数内部加上 [目标控件.superview layoutIfNeeded] 这条语句,否则会无法天生动画效果。
由于设置的束缚并不会立刻收效,以是我们必要用 layoutIfNeeded 来对其逼迫更新,再初次束缚和让其开始动画的时间都得更新一次,否则动画的效果会很奇怪
和平常的方法实现差不多,重点只是修改束缚后调用 [view.superview layoutIfNeeded]; 而已
用 Masonry 库做动画时,肯定要利用 mas_updateConstraints 的更新束缚
[view mas_makeConstraints:^(MASConstraintMaker *make) {    make.top.mas_equalTo(400);    make.left.mas_equalTo(100);    make.size.mas_equalTo(CGSizeMake(100, 100));}];[view.superview layoutIfNeeded];//如果其束缚还没有天生的时间必要动画的话,就请先逼迫革新后才写动画,否则全部没天生的束缚会直接跑动画[UIView animateWithDuration:3 animations:^{    [view mas_updateConstraints:^(MASConstraintMaker *make) {    make.left.mas_equalTo(200);    }];    [view.superview layoutIfNeeded];//逼迫绘制}];
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:49, Processed in 0.110737 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表