UICoreAnimation(2):Calayer…

(1)在calayer内部绘图需要遵循这个layer的代理方法:myLayer.delegare = self;//这个mylayer是在父视图中创建的,你要直接在父视图里面给mylayer上面显示东西,就需要前面的代理方法了。
那么前面的为什么不需要呢,因为他是在创建这个layer,而不是去他的内部干什么.所以不需要。

//self.view.layer.delegate = self.view;不能这样,或者myLayer.delegare = self.view;因为每个view当中都有一个自己的layer来显示界面,第一个的话是给这个父视图的layer复写

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {

}这个方法,做的图是直接在父视图上面显示的,而后面的那个则是不对的,新建的layer的代理=父视图的view是不对的,而如果在父视图中想要复写这个方法的话是需要调用 [self.view.layer setneeddisplay],这个是界面刷新。
如果在创建了一个子类view,则在[self.view addsubview:]的时候调用了一次[self.view.layersetneeddisplay].

  //UIKit提供的方法在此协议中无效,为了避免CoreAniamtion跨平台的框架和UIKit相应的方法耦合在一起

//    [[UIColor blueColor] setFill];

//    UIRectFill(CGRectMake(50, 50, 100, 100));

    

    //CGAPI

    CGContextAddRect(ctx, CGRectMake(50, 50, 100, 100));

    CGContextSetRGBStrokeColor(ctx, 0, 0, 1, 1);

    

    CGContextDrawPath(ctx, kCGPathStroke);

这句话的意思是在复写drawlayer的时候不能用uikit的方法引文Uikit只能在ios中使用,而core animation则是一个c接口,都能用,你不能有一个小得那个类的方法,去给大得那个类定义,定义成功了,这个大的类也无法给其他小类使用了。

还有你每次新建一个view的时候,他自己默认了一个协议self.view.delegate = self.view;

如果你想子类化drawrect就是调用- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {

    

    NSLog(@"%p", ctx);

    

    [super drawLayer:layer inContext:ctx];//这个方法是下面这个方法的复写,写了这个下面这个就不调用了

    

}

- (void)drawRect:(CGRect)rect {


//    NSLog(@"%@", self);

//    NSLog(@"%@", self.layer.delegate);

    

    

    CGContextRef context = UIGraphicsGetCurrentContext();

    

     NSLog(@"%p", context);//这个方法是父类的方法,如果没有方法重写,则调用此方法进行画图。

    

}

rootLayer的某一些属性默认带隐式动画效果,时长为1/4s,下面的方法都是自己新建的layer自带的动画效果

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    

    UITouch *touch = [touches anyObject];

    

    CGPoint p = [touch locationInView:self.view];

    

    myLayer.position = p;

    

    NSInteger size = arc4random_uniform(50) + 50;

    

    myLayer.bounds = CGRectMake(0, 0, size, size);

    

    myLayer.backgroundColor = [UIColor greenColor].CGColor;

    

    myLayer.cornerRadius = arc4random_uniform(20);//这个显示界面得角度

    

    myLayer.opacity = arc4random_uniform(10)/10.0;//这个显示界面得透明度

    

    

    //其他的可以通过commed点进去查看

    

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值