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何が機能するかは関係ありません。layoutSubviewsUIKit は独自に layoutSubviews を頻繁に呼び出すため、そのメソッドがいつ呼び出されるかを完全に制御できるとは限りません。

于 2013-03-21T20:55:57.600 に答える