マスク画像なしで角丸矩形を作る方法

CSS3で角丸が作れるんだからできるはずということで方法を探してみるとあった。しかもめちゃ簡単。


CoraAnimationを使ってUIViewからデフォルトのCALayerを取りだして角丸にしてしまう。
まずはフレームワークQuartzCoreを有効にしておく。(フレームワークの追加とのimport)

表示されているUIViewのインスタンスviewInstanceがあるとすると、

CALayer *layer = viewInstance.layer;
layer.masksToBounds = YES;
layer.cornerRadius = 20.0f;

これだけ。

角丸画像する時も超簡単。

表示されているUIImageViewインスタンスimageViewInstanceがあるとすると、UIImageViewもUIViewのインスタンスサブクラスなのでCALayerが取れる。

CALayer *layer = imageViewInstance.layer
layer.masksToBounds = YES;
layer.cornerRadius = 20.0f

これだけ。


プロパティ指定するだけだから判りやすくて良いかと。
ただ、このためだけにQuartzCoreをインクルードするのももったいないというのはあるかも。

CGRect screenBounds = CGRectMake(0, 0, 300, 300);
UIView *v = [[[UIView alloc] initWithFrame:screenBounds] autorelease];
v.center = CGPointMake(160, 240);
[window addSubview:v];
int hCnt = 6;
int vCnt = 6;
CGFloat layerWidth = screenBounds.size.width / hCnt;
CGFloat layerHeight = screenBounds.size.height / vCnt;
CGRect layerBounds = CGRectMake(0, 0, layerWidth, layerHeight);
CGFloat cornerRadius = (layerWidth + layerHeight) / 2  / 4;
CALayer *layer;
for (int j = 1; j <= vCnt; j ++){
  for (int i = 1; i <= hCnt; i++) {
    layer = [CALayer layer];
    [v.layer addSublayer:layer];
    layer.bounds = layerBounds;
    layer.position = CGPointMake(layerWidth * i - layerWidth / 2, layerHeight * j - layerHeight / 2);
    layer.backgroundColor = [[UIColor colorWithHue:0.3 saturation:1.0f brightness:(1 - (CGFloat)j / vCnt) alpha: (CGFloat)i / hCnt ] CGColor];
    layer.masksToBounds = YES;
    layer.cornerRadius = cornerRadius;
  }
}