CS193p Lecture 8 - Protocols, Blocks and Animation

一、协议(Protocols)

 

1. 声明协议

@protocol Foo <Xyzzy, NSObject>
// ...
@optinal
//
@required
//...
@end

(与@interface几乎一致)

-协议只是方法的声明,没有实现部分

-协议中声明的方法必须实现

加上@optional,其后的方法可选,其前的方法必须实现

加上@required,其后的方法必须实现

-如果你要实现协议Foo,也要实现Xyzzy协议和NSObject中全部必须的方法,

 

2. 指定协议

// 公有指定
#import "Foo.h"
@interface MyClass : NSObject <Foo>
// ...
@end

// 私有指定
@interface MyClass() <Foo>
@end
@implementation MyClass
// ...
@end

 

3.用协议指定变量

id <Foo> obj = [[MyClass alloc] init]

 

4. 协议的使用场景

最常见的是:delegate 和 dataSource

视图向控制器发消息:通过 不可视结构化通信(blind structured communication)

@property (nomatomic, weak) id <UISomeObjectDelegate> delegate;
@property (nomatomic, weak) id <UISomeObjectDataSource> dataSource;

 

二、块(Blocks)

1. 在其他语言中,称为闭包(closure)

2. 加上__block后,变量在块中保存的不在是变量的值,而是变量的地址,所以可以被修改;

如果加上这个修饰,此变量会从栈移到堆中,从而可以在block中使用,等block结束,再将信息复制回堆,再放回到栈上;

3. 每次向block中的对象发送消息时,系统都会创建一个指向该对象的强指针,直至block不存在

4. block表现得像对象,体现在:

 - 可以被存储,如存在property、dictionary、array中

 - 可以被自动引用计数(ARC)统计

 - 能接受的一个消息,就是复制(copy)

5. Memory cycle

解决办法:

创建一个weak版的self,然后block中用weakSelf

__weak MyClass *weakSelf = self;
[self.myBlocks addObject:^{
    [weakSelf doSomeThing];
}]

6. block的用处

 

三、动画(Animation)

1、UIView Animation

frame、transform、alpha

+ (void)animateWithDuration:(NSTimeInterval)duration
                      delay:(NSTimeInterval)delay
                    options:(UIViewAnimationOptions)options
                 animations:(void (^)(void))animations
                 completion:(void (^)(BOOL finished))completion;
+ (void)transitionWithView:(UIView *)view
                  duration:(NSTimeInterval)duration
                   options:(UIViewAnimationOptions)options
                animations:(void (^)(void))animations
                completion:(void (^)(BOOL finished))completion;

 

2、Dynamic Animation

UIDynamicAnimator


UIDynamicBehavior

UIGravityBehavior(重力)
UICollisionBehavior(碰撞)
UIAttachmentBehavior(吸附)
UISnapBehavior(捕捉)
UIPushBehavior(推动)


UIDynamicItem

 

 

Demo

Dropit(类似俄罗斯方块的小游戏)

 

posted @ 2015-06-01 21:53  mobilefeng  阅读(206)  评论(0)    收藏  举报