使用CAShapeLayer作为掩码的UIView的子类不能正确设置动画

时间:2012-02-19 12:43:45

标签: cocoa-touch uikit xamarin.ios cashapelayer

我通过添加图层蒙版为我的子类UIView添加了圆角。以下是Montouch代码,但也应该很容易在ObjC中获得含义:

// Add a layer that holds the rounded corners.
UIBezierPath oMaskPath = UIBezierPath.FromRoundedRect (this.Bounds, this.eRoundedCorners, new SizeF (this.fCornerRadius, this.fCornerRadius));

private void UpdateMask()
{           
if(this.Layer.Mask == null)
{
    CAShapeLayer oMaskLayer = new CAShapeLayer ();
    oMaskLayer.Frame = this.Bounds;

    // Set the newly created shape layer as the mask for the image view's layer
    this.Layer.Mask = oMaskLayer;
}
((CAShapeLayer)this.Layer.Mask).Path = oMaskPath.CGPath;
}

我重载了Frame属性。设置框架会调整蒙版以保持圆角的形状。

但是,如果我为帧大小的变化设置动画,则会立即将蒙版设置为动画的目标值。

有没有办法让我的视图检测到是动画的一部分并使蒙版正确动画?

1 个答案:

答案 0 :(得分:1)

这就是CoreAnimation如何用于显式动画。

使用显式动画,您永远不会实际更改原始对象的值,只需在表示层中为对象设置动画即可。因此,您需要确保在使用最终想要的值开始动画之前已设置对象。

WWDC 2011在线视频的“核心动画要点”中介绍了如何解决此类问题的完整说明。寻找会话421