iOS7应用开发8:协议、程序块及动画效果

1、分类category和协议Protocol

协议定义了一组方法,可用于处理id类型的对象。例如:id <MyProtocol> obj;MyProtocol被定义为一组方法。

(1)分类category:

分类可以以模块化的方法向类中添加新的方法,使用分类对类进行扩展不需要访问该类本身,也无需对其进行派生。

定义category:在Xcode中选择新建一个objective-c分类,则会生成一组.h和.m文件,以类名+分类名命名;如下图所示:

该图显示了一个名为aCategory的分类对BaseClass类的扩展;在category的头文件和源文件中可以分别声明和实现相应的方法。

个人认为,分类中定义的方法和类本身实现的方法并没什么本质的区别,只是分类中实现的方法可以认为是动态绑定方法,在运行时调入。

(2)协议protocol

协议是在多个类之间可以共享的方法列表,这些方法在定义的时候只有声明却没有实现(其代码只有头文件没有源文件),如下图所示。其实现应该由采用该协议的类完成,其中包括必须实现方法和可选择实现方法。协议可以继承别的协议,但是不能在协议中定义成员变量。

协议的实现需要在采用该协议的类的继承关系之后,用<aProtocol>表示。

两个重要协议:<NSCopying><NSCoding>;

#ios中应用协议最广泛的地方便是代理(delegate)和数据源(datasource);

当一个类的实例对象希望完成某个特定的、不属于此类对象常用的方法时,从该类派生出一个新类是比较低效率的;相反,比较高效的方法便是使用代理。数据源的作用是将视图类同数据联系,因为数据不是视图的一部分,视图不拥有数据。

2、程序块blocks

block是一块代码,在{}之间的代码段。block可以作为一个函数的参数传递。

block可以在内部使用在之前定义的变量,但是这些变量是只读的,除非在定义这些变量时在前面加上__block。

使用场景:枚举enumeration、视图动画、通知、错误处理、动作完成处理等,最重要的一点即多线程操作。

对于block的更多细节将会在未来详述。

3、动画效果——视图的动画效果、视图控制器的动画效果、core animation框架;

#通过改变视图的属性制造动画效果:frame——尺寸、transform——平移、缩放和旋转、alpha——透明度;

实现方法:

(1)UIView类方法和block

+ (void) animationWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval))delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

调用时,视图属性的变化瞬时发生,但是其显示通过动画效果逐渐显现。

视图间转换的动画效果:

+ (void)transitionFromView:(UIView*)fromView toView:(UIView*)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;

(2)动态动画:为各个视图定义相应的物理运动,并让其执行;
步骤:创建UIDynamicAnimator->添加UIDynamicBehaviors->添加UIDynamicItems。

如下程序段所示:

UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:aView];
UIGravityBehavior *gravity = [[UIGravityBehavior alloc] init];
[animator addBehavior:gravity];
UICollisionBehavior *collider = [[UICollisionBehavior alloc] init];
[animator addBehavior:collider];
id <UIDynamicItem> item1 = ...;
id <UIDynamicItem> item2 = ...;
[gravity addItem:item1];
[collider addItem:item1];
[gravity addItem:item2];
时间: 2024-10-27 00:05:05

iOS7应用开发8:协议、程序块及动画效果的相关文章

Android开发中MJRefresh自定义刷新动画效果_Android

[一]常见用法 最原始的用法,耦合度低,但是不能统一管理.我们需要在每一个控制器都写以下代码,很繁琐,以后项目修改起来更繁琐,得一个控制器一个控制器的去定位.修改. 1.1 使用默认刷新(耦合度底,但是想统一修改起来特别麻烦) self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ //在这里执行刷新操作 }]; self.tableView.mj_header = [MJRefreshNorm

苹果开发之一个简单的动画效果(方块来回反复移动)

1,下面是一个简单的动画效果 使用 UIView.animateWithDuration() 给方块添加动画,让其在屏幕左侧与右侧间不断地来回运动.  .Autoreverse参数表示:动画运行到结束点后仍然以动画方式回到初始点(本例是x坐标)   .Repeat参数表示:动画重复执行      开发之一个简单的动画效果(方块来回反复移动)-我的世界方块学园动画">       import UIKit   class ViewController: UIViewController {

Android开发中MJRefresh自定义刷新动画效果

[一]常见用法 最原始的用法,耦合度低,但是不能统一管理.我们需要在每一个控制器都写以下代码,很繁琐,以后项目修改起来更繁琐,得一个控制器一个控制器的去定位.修改. 1.1 使用默认刷新(耦合度底,但是想统一修改起来特别麻烦) self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ //在这里执行刷新操作 }]; self.tableView.mj_header = [MJRefreshNorm

c语言-c,c++实现简单的动画效果

问题描述 c,c++实现简单的动画效果 一个六数码的问题,六个数经过一定的变化变成有序的数 例如 2 5 3 1 4 6 变成了 1 2 3 4 5 6 控制台程序已经写好了,黑白框中能运行处正确结果 目前想做一个简单的动画效果演示一下,需要学习哪些知识,不要太复杂的 = = 网上找的说的太空泛,完全没有方向233 解决方案 ios开发之简单实现loading动画效果js动画效果简单实现iOS简单的动画效果实现 解决方案二: 动画效果演示一下,你要演示什么 解决方案三: 你想要什么样的动画? 最

AppleWatch开发入门九——Watch帧动画的实现

AppleWatch开发入门九--Watch帧动画的实现         动画一直是iOS系统的一大亮点,CoreAnimation和粒子效果的支持,开发者可以很容易的做出效果炫酷的动画特效.在watchOS中,由于性能和屏幕尺寸的限制,对于动画,并没有强大的框架支持,但是这并不是说开发者就没办法在watch上添加动画的特效了.在watchOS中唯一可以让开发者用于动画操作的就是帧动画.         和iOS类似,watchOS中的真动画也是通过UIImage对象的合集来展示的.只是设置和用

iOS动画开发之五——炫酷的粒子效果

iOS动画开发之五--炫酷的粒子效果         在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一现,想用UIKit框架写出一款炫酷的休闲游戏,那个有一个东西可以帮到你:iOS的粒子效果引擎. 一.粒子发射器         iOS中的粒子效果有两部分组成,一部分为发射器,设置例子发射的宏观属性,另一部分是粒子单元,用于设置相应的粒子属性.粒子发射器是基于Layer层,没错,又是

HTML 5 2D 游戏开发:碰撞检测和 sprite 动画

碰撞检测和 sprite 动画是所有视频游戏的主要成分.Snail Bait(本系列文章中构建的游戏)也不例外 .图 1 显示了 Snail Bait 的跑步小人与左上角的蜜蜂碰撞后发生爆炸. 图 1. 碰撞检测的实际应用 开发:碰撞检测和 sprite 动画-unity2d sprite动画"> 在本文中,学习如何: 检测碰撞 将 HTML5 Canvas 上下文用于碰撞检测 将碰撞检测实现为 sprite 行为 处理碰撞 实现 sprite 动画,比如爆炸 碰撞检测过程 碰撞检测是一个

Android LibGDX游戏引擎开发教程(九) 动画类的使用

对于一款成功的游戏,动画效果也是整个游戏中不可或缺的元素之一,那下面我们就来讲解一下动画类的 使用方法. 一.Animation类 1.Animation介绍 开发教程(九) 动画类的使用-android 动画引擎"> 该类存放在 com.badlogic.gdx.graphics.g2d的包下,该类继承自Object. 2.Animation定义 这 是官方API的定义,大概的意思是说:一个动画就是存放了一个列表的图片表示在设定的时间间隔序列的显示 .比如,一个正在跑步或者正在跳动的人.

安卓UI设计与开发教程 滑动菜单栏(三)SlidingMenu动画效果的实现

经过上一篇文章的学习,相信大家对开源项目SlidingMenu的用法已经有了一个非常深入的了解,那么这一 章博主就来教大家滑动菜单栏滑动时动画效果的实现.博主这里用了三个不同动画效果的基础示例来教大家如 何去实现,等大家弄懂了之后完全可以做到举一反三,去实现更多不同的动画效果,让你的应用软件给用户带 来眼前一亮的效果. 一.SlidingMenu动画效果示例一 1.示例一效果图 该示例实现了 滑动时缩放的效果,看左边的效果图可以明显的感觉到,滑动菜单栏刚刚打开时的图片比右边的效果图滑动菜 单栏打