`

[转]UIView 动画的两种编程方式

 
阅读更多

iOS  中的 UIView 动画编程其实还是很简单的,像 CSS3 一样,在给定的时间内完成状态连续性的变化呈现。比如背景色,Frame 大小,位移、翻转,特明度等。

以前我使用的编程方式都是用下面那样的三段式处理:

1
2
3
4
5
6
7
8
    [UIView beginAnimations:nil context: nil];
    [UIView setAnimationDuration:1.0];
     
    //要动画改变的属性
    self.view.alpha = 0.0;
    self.view.frame = CGRectMake(10, 10, 50, 50);
     
    [UIView commitAnimations];

那么被 beginAnimations 和  commitAnimations 框起来的代码就会让你产生动画效果,这种方式像是数据库中的事物编程一样。

还有另一种编程方式,使用代码块,对于常常书写 JS 代码的同志会比较适应,还是来个简单的代码片段:

1
2
3
4
5
    [UIView animateWithDuration:1.0
                     animations:^{
                         self.view.alpha = 0.0;
                         self.view.frame = CGRectMake(10, 10, 50, 50);
                     }];

对于不太复杂的动画,上面的写法很精练,因为只有一条语句,如果动画太过复杂了,写在这样一条语句中就会显得冗长了,对于代码调试没那么方便。

animateWithDuration 有三个重载方法:

比如我们用最后面那个重载方法,可以比 beginAnimations...commitAnimations 更轻松的实现动画完后执行的动作,如:

01
02
03
04
05
06
07
08
09
10
    [UIView animateWithDuration:1.0
                          delay: 0.0
                        options: UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         self.view.alpha = 0.0;
                         self.view.frame = CGRectMake(10, 10, 50, 50);
                     }
                     completion:^(BOOL finished){
                         NSLog(@"Do something after the animation.");
                     }];

再回头看看 beginAnimations...commitAnimations 该如何实现上面同样的行为:

01
02
03
04
05
06
07
08
09
10
11
12
13
    [UIView beginAnimations:nil context: nil];
    [UIView setAnimationDuration:1.0];
     
    [UIView setAnimationDelay:0.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
     
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationStopped)];
     
    self.view.alpha = 0.0;
    self.view.frame = CGRectMake(10, 10, 50, 50);
     
    [UIView commitAnimations];

还要给当前类加一个方法 animationStopped:

1
2
3
-(void) animationStopped {
    NSLog(@"Do something after the animation.");
}

代码是多些,但是 beginAnimations...commitAnimations 编程方式是全能的,而 animateWithDuration 是有局限性的,因为它的目的就是让编写代码更简洁。在 animateWithDuration 中只提供了 completion 代码块,意即在动画完成后执行的动作,而要达成

[UIView setAnimationWillStartSelector:@selector(animationWillStart)]

这样的在动画即将启动之前的动作却是无能为力,还有些动画设置也是 animateWithDuration 做不到。所以一旦你先前用 animateWithDuration  实现的动画方式要增加稍复杂的功能而不得不用 beginAnimations...commitAnimations 来改写时,付出就大了。

该用哪种方式,只能自己斟酌吧。

分享到:
评论

相关推荐

    iOS-自定义转场动画

    在iOS开发中,自定义转场动画是一种提升用户体验的有效手段,它可以让你的应用界面在页面切换时展现出独特的视觉效果。本文将深入探讨自定义转场动画的相关知识点,帮助开发者更好地理解和应用这一技术。 首先,转...

    核心动画编程指南

    iOS核心动画支持隐式和显式动画两种形式。隐式动画由UIKit自动管理,开发者只需设置某些属性(如透明度、位置等),系统会自动应用默认的动画效果。显式动画则提供更精细的控制,允许开发者自定义动画的类型、时长...

    iphone范例代码,翻转动画特效

    除了`transitionWithView:`,还可以利用`CATransition`来创建更复杂的转场动画。`CATransition`是Core Animation层的一个对象,它可以创建更多种类的动画效果,比如推入、弹出、溶解等。对于翻转效果,可以这样做: ...

    swift-iOS11AppStore转场动画

    在iOS 11 App Store中,这种动画体现在搜索结果页面和详情页面之间的切换,它以一种平滑、流畅的方式展开,增强了整体的视觉连贯性。 要实现这样的动画,开发者需要熟悉UIKit框架,特别是...

    ios-两个View翻转动画轮流显示.zip

    本示例项目“ios-两个View翻转动画轮流显示.zip”主要展示了如何通过编程方式实现两个视图之间的翻转动画,使得点击一个视图时,它能够翻转到另一个视图,并且可以来回翻转,实现轮流显示的效果。下面我们将详细探讨...

    swift-Twinkle-✨一个Swift和简单的方法能让任何UIView产生闪烁效果

    标题中的"swift-Twinkle-✨一个Swift和简单的方法能让任何UIView产生闪烁效果"指出了这个库的核心功能:用Swift编写,提供一种简洁的方式,使任何UIView对象都能实现闪烁效果。这使得开发者无需深入学习复杂的动画...

    swift-iOS转场动画+刮奖卡

    此外,`UIViewControllerAnimatedTransitioning`协议提供了动画执行的时机和方式,让我们能精确控制动画的开始、结束和持续时间。 接着,我们来讨论刮奖卡效果。刮奖卡是一种常见的互动元素,常见于彩票应用或游戏...

    IOS位移动画和渐隐动画

    下面将详细介绍如何在iOS中实现这两种动画效果,并提供相关的编程知识。 一、位移动画 位移动画在iOS中通常通过`UIView`类提供的`animateWithDuration:`方法来实现。这个方法允许开发者在指定的时间内改变视图的...

    核心动画编程指南 + iOS上的图形和动画处理(中文)

    CAKeyframeAnimation和CABasicAnimation是两种主要的动画类型,分别用于关键帧动画和基本属性动画。动画可以是连续的,也可以基于关键帧,而且可以与视图控制器的生命周期紧密结合。 5. **iOS图形处理**:除了Core ...

    UIView/UIButton任意添加某个边框

    在iOS开发中,`UIView`和`UIButton`是两种非常基础且常用的UI控件。`UIView`作为视图的基础类,通常用于展示内容或者作为容器,而`UIButton`则用于创建交互式的按钮。在实际应用中,我们有时需要对这些控件进行...

    swift-一个辅助类来实现两个UIView之间的粘结效果

    在传统的UIView动画实现中,开发者通常需要手动处理多个视图的布局变化和动画帧计算,这不仅代码复杂,而且容易出错。而`DGCuteHelper`通过封装这些细节,提供了一种简洁的API,让开发者能够快速实现视图间的联动...

    Swift版抽屉效果,自定义转场动画管理器

    在iOS开发中,为了提供更具吸引力的用户体验,开发者经常需要实现各种各样的动画效果,其中抽屉效果(Drawer Effect)是一种常见的设计模式,常用于侧滑菜单或隐藏内容的展示。Swift作为苹果官方推荐的编程语言,其...

    Swift-专为手势动画设计。快速简单可扩展

    UIView动画提供了一种简单的方式来创建基本的动画效果,如平移、旋转、缩放等。通过UIView.animate(withDuration:animations:)方法,开发者可以在指定的时间内改变视图的属性,实现动画效果。而Core Animation是一个...

    iOS核心动画编程指南中文版

    ### iOS核心动画编程指南知识点详解 #### 一、核心动画编程介绍 **核心动画**是iOS和macOS中用于创建动态视觉效果的核心技术之一。它为开发者提供了强大的工具集,可以轻松实现各种复杂的动画效果。核心动画框架是...

    ios-UIView分类,可直接修改frame的值.zip

    总的来说,这个`UIView+Extension`分类为iOS开发者提供了一种高效、简洁的方式来管理视图的位置和大小,提升了开发体验。在实际应用中,开发者可以根据自己的需求选择使用原生方式还是分类方法,以达到最佳的代码...

    Swift基础之动画开发

    在Swift中创建动画,通常有两种方式:使用UIView的animate(withDuration:)方法和使用CAAnimation。animate(withDuration:)方法是基于关键帧的,适用于简单、线性的动画效果,例如视图的平移、旋转或透明度变化。下面...

    IOS应用源码——动画.zip

    首先,iOS系统主要基于Objective-C和Swift两种编程语言进行开发。尽管标签中只提到了"ios"和"IOS",但根据标题中的"源码",我们可以推测这个压缩包可能包含了这两种语言中的一种或两种的代码。Objective-C是苹果的...

    鱼骨加载动画。主题架构加载

    6. **Swift或Objective-C编程**:TABAnimated库支持这两种主流的iOS开发语言。开发者可以根据他们的偏好选择使用哪种语言来实现鱼骨加载动画。 7. **动画性能优化**:由于动画会占用CPU和GPU资源,因此在实现鱼骨...

    ios-太阳、地球、月亮自转公转动画、流星动画、下雪动画.zip

    在iOS开发中,视图动画(View Animation)是一种强大的工具,可以用来创建各种吸引人的视觉效果,如模拟现实世界中的自然现象。标题“ios-太阳、地球、月亮自转公转动画、流星动画、下雪动画.zip”所提及的项目,...

    IOS应用源码Demo-动画-毕设学习.zip

    10. **Swift或Objective-C编程实践**:通过阅读源码,可以加深对这两种编程语言的理解。 这个源码Demo对于初学者和有经验的开发者都是宝贵的资源,可以帮助他们深入理解iOS动画机制,并将其应用于实际项目中。通过...

Global site tag (gtag.js) - Google Analytics