ios – 当我为UIView的界限设置动画时,如何重绘UIView的子图层?

我有一个带有几个自定义绘制子层的UIView(一些带有CAShapeLayer掩码的CAGradientLayers等).我正在使用UIView动画方法来动画它的边界(增加它的宽度和高度).
[UIView animateWithDuration:2 delay:0 options:UIViewAnimationoptionCurveEaSEOut|UIViewAnimationoptionAutoreverse|UIViewAnimationoptionRepeat animations:^{
    CGRect bounds = myView.bounds;
    bounds.size.width += 20;
    bounds.size.height += 20;
    myView.bounds = bounds;
} completion:nil];

这样可以正常工作,除了子图层不会像其动画一样重新绘制.最好的方法是什么?我是否需要设置一些键值观察检测边界变化并在所有子层上调用setNeedsdisplay?

解决方法

图层不像视图一样工作.如果在父图层上调用setNeedsdisplay(如果已将needsdisplayOnBoundsChange设置为YES,则会发生这种情况),它不会影响子图层.你也需要调用setNeedsdisplay.

如果在调整父图层大小时也需要调整子图层的大小,则在父图层(或layoutSublayersOfLayer:在其委托中)中实现layoutSublayers.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...