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

简介: 1、分类category和协议Protocol 协议定义了一组方法,可用于处理id类型的对象。例如:id obj;MyProtocol被定义为一组方法。

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];


目录
相关文章
|
2月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
233 60
|
2月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
3月前
|
Android开发 Swift iOS开发
iOS和安卓作为主流操作系统,开发者需了解两者差异以提高效率并确保优质用户体验。
【10月更文挑战第1天】随着移动互联网的发展,智能手机成为生活必需品,iOS和安卓作为主流操作系统,各有庞大的用户群。开发者需了解两者差异以提高效率并确保优质用户体验。iOS使用Swift或Objective-C开发,强调简洁直观的设计;安卓则采用Java或Kotlin,注重层次与动画。Swift和Kotlin均有现代编程特性。此外,iOS设备更易优化,而安卓需考虑更多兼容性问题。iOS应用仅能通过App Store发布,审核严格;安卓除Google Play外还可通过第三方市场发布,审核较宽松。开发者应根据需求选择合适平台,提供最佳应用体验。
85 3
|
2月前
|
开发框架 前端开发 Android开发
探索安卓和iOS应用开发中的跨平台解决方案
【10月更文挑战第42天】在移动应用开发的广阔天地中,安卓和iOS系统如同两座巍峨的山峰,分别占据着半壁江山。开发者们在这两座山峰之间穿梭,努力寻找一种既能节省资源又能提高效率的跨平台开发方案。本文将带你走进跨平台开发的世界,探讨各种解决方案的优势与局限,并分享一些实用的代码示例,助你在应用开发的道路上更加游刃有余。
|
2月前
|
Android开发 Swift iOS开发
探索iOS与安卓应用开发的差异性
探索iOS与安卓应用开发的差异性
53 2
|
2月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
76 1
|
3月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
68 5
|
3月前
|
Java Android开发 Swift
掌握安卓与iOS应用开发:技术比较与选择指南
在移动应用开发领域,谷歌的安卓和苹果的iOS系统无疑是两大巨头。它们不仅塑造了智能手机市场,还影响了开发者的日常决策。本文深入探讨了安卓与iOS平台的技术差异、开发环境及工具、以及市场表现和用户基础。通过对比分析,旨在为开发者提供实用的指导,帮助他们根据项目需求、预算限制和性能要求,做出最合适的平台选择。无论是追求高度定制的用户体验,还是期望快速进入市场,本文都将为您的开发旅程提供有价值的见解。
|
3月前
|
物联网 vr&ar Android开发
掌握安卓与iOS应用开发:核心技术与未来趋势
本文深入探讨了安卓和iOS应用开发的核心技术,包括开发环境、主要编程语言、常用框架以及性能优化技巧。同时,文章还展望了两大平台未来的发展趋势,如人工智能、增强现实和物联网的集成,为开发者提供全面的技术参考和发展指引。
|
3月前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
77 4