iOS动画的图层响应用户输入

      每个图层属性的显示值都被存储在一个叫做呈现图层的独立图层当中,他可以通过-presentationLayer方法来访
问。 这个呈现图层实际上是模型图层的复制,但是它的属性值代表了在任何指定时刻当前外观效果。换句话说,你
可以通过呈现图层的值来获取当前屏幕上真正显示出来的值。大多数情况下,你不需要直接访问呈现图层,你可以
通过和模型图层的交互,来让Core Animation更新显示。两种情况下呈现图层会变得很有用,一个是同步动画,一
个是处理用户交互。

eg:
@interface ViewController ()
@property (nonatomic, strong) CALayer *colorLayer;
@end
@implementation ViewController
- (void)viewDidLoad
{
     [ super  viewDidLoad];
     //create a red layer
     self.colorLayer = [CALayer layer];
     self.colorLayer.frame = CGRectMake(0, 0, 100, 100);
     self.colorLayer.position = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);
     self.colorLayer.backgroundColor = [UIColor redColor].CGColor;
     [self.view.layer addSublayer:self.colorLayer];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     //get the touch point
     CGPoint point = [[touches anyObject] locationInView:self.view];
     //check if we've tapped the moving layer
     if  ([self.colorLayer.presentationLayer hitTest:point]) {
         //randomize the layer background color
         CGFloat red = arc4random() / (CGFloat)INT_MAX;
         CGFloat green = arc4random() / (CGFloat)INT_MAX;
         CGFloat blue = arc4random() / (CGFloat)INT_MAX;
         self.colorLayer.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0].CGColor;
     else  {
         //otherwise (slowly) move the layer to new position
         [CATransaction begin];
         [CATransaction setAnimationDuration:4.0];
         self.colorLayer.position = point;
         [CATransaction commit];
     }
}
@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值