1

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

但是,当我在第一次设置视图后尝试重新设置视图的 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;
}

但是没有视觉上的变化。我需要做什么?

4

1 回答 1

1

您应该避免修改 layoutSubviews 中的视图(或本例中的图层)层次结构。我建议创建一个类似的方法- (void)setRoundedCornersEnabled:(BOOL)roundedCornersEnabled来适当地修改图层以创建圆形或方形效果。

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

于 2013-03-21T20:55:57.600 回答