非矩形型のボタンを作りたいのですが、今使っているのが透過png画像なのがいけないのかもしれないと考え、図形を描いて試してみました。
objective-Cで図形を描くこと自体が初めてなのに、今回のアプリの時計部分をCALayerで作ってしまったため、CALayerに図形を描く方法を探さねばなりませんでした。
いろいろググったところ、こちらのサイトで方法を見つけました。
早速、自分のソースコードに組み込みました。
円の描き方や色の付け方は、他のサイトを参考に、自分がやりやすい方法を使ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//文字盤back layer_clock_back =[CALayer layer]; layer_clock_back.frame = CGRectMake(0, 0, 300, 300); layer_clock_back.position =CGPointMake(160, 180); layer_clock_back.zPosition =20; UIGraphicsBeginImageContext(CGSizeMake(300, 300));// オフスクリーンに描画 CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);//塗り色 CGContextSetStrokeColorWithColor(context, [UIColor orangeColor].CGColor);//線色 CGContextSetLineWidth(context, 4.0);//線の太さ CGContextAddEllipseInRect(context, CGRectMake(4, 4, 292, 292));//円の大きさ CGContextDrawPath(context, kCGPathFillStroke);//描く UIImage *img = UIGraphicsGetImageFromCurrentImageContext();// オフスクリーン内容をUIImageに変換 UIGraphicsEndImageContext();// オフスクリーン描画を終了 layer_clock_back.contents = (id)img.CGImage;//layerにイメージをセットする [baseLayer addSublayer:layer_clock_back]; |
CALayerで矩形を作って、オフスクリーンに描画し、最後にそれをソースとしてレイヤーにaddするようです。
ただ、残念ながら、描画されていない場所もタッチが反応するのは、透過png画像と変わりありませんでした。
他の方法を探さねばなりません。。。