更改视图的layer.mask不会在第一次更新后更新

时间:2013-03-21 19:44:56

标签: iphone ios objective-c xcode ipad

我需要一个视图在某些条件下有圆角,而在其他条件下有正方形。

但是,当我第一次尝试重新设置视图的layer.mask时,视觉上没有任何变化。

我首先在layoutSubviews方法中设置角落

- (void)layoutSubviews 
{

  // Create the mask image by calling the function
  UIImage *mask = MTDContextCreateRoundedMask( self.bounds, 10.0, 0.0, 10.0, 0.0 );
  // Create a new layer that will work as a mask
  CALayer *layerMask = [CALayer layer];
  layerMask.frame = self.bounds;
  // Put the mask image as content of the layer
  layerMask.contents = (id)mask.CGImage;
  // set the mask layer as mask of the view layer
  self.layer.mask = layerMask;
}

然后一旦满足条件,我就会调用另一种方法

- (void)resetCorners {

  // Create the mask image by calling the function
  UIImage *mask = MTDContextCreateRoundedMask( self.bounds, 0.0, 0.0, 0.0, 0.0 );
  // Create a new layer that will work as a mask
  CALayer *layerMask = [CALayer layer];
  layerMask.frame = self.bounds;
  // Put the mask image as content of the layer
  layerMask.contents = (id)mask.CGImage;
  // set the mask layer as mask of the view layer
  self.layer.mask = layerMask;
}
然而,没有视觉上的变化。我需要做什么?

1 个答案:

答案 0 :(得分:1)

您应该避免在layoutSubviews中修改视图(或在本例中为图层)层次结构。我建议创建一个像- (void)setRoundedCornersEnabled:(BOOL)roundedCornersEnabled这样的方法,它可以适当地修改图层以创建圆角或方形效果。

在大多数情况下,layoutSubviews中您需要的唯一代码是修改子视图框架的代码,无论layoutSubviews在视图的所有可能状态下都应该工作(在这种情况下是圆角)启用与否)。 UIKit经常自己调用layoutSubviews,所以你不能完全控制何时调用该方法。