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(类似俄罗斯方块的小游戏)

 

你可能感兴趣的:(animation)