コアグラフィックを使って色々な形の吹き出しを作っています。
しかし、吹き出しの作り方がわからない。
長方形から角丸長方形を作りました。同じ方法を使用しますか
思考バブルを作るか、他の方法はありますか?
これを最初のガイダンスとして使用してから、それに基づいて構築できると思います。
その投稿からのsamfu_1の回答は次のとおりです
私はそれを2回繰り返します。最初にコンテキストを取得し、パスを開始します。楕円を塗りつぶしてから、三角形を 3 本の線で囲むカスタム パスを塗りつぶします。私は次の寸法を想定しました:幅70、高さ62。UIView のサブクラスで draw rect をオーバーライドし、サブクラス化された UIViewController でインスタンス化します。
-(void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetRGBFillColor(ctx, 0.0, 0.0, 1.0, 1.0); CGContextFillEllipseInRect(ctx, CGRectMake(0.0, 0.0, 70.0, 50.0)); //oval shape CGContextBeginPath(ctx); CGContextMoveToPoint(ctx, 8.0, 40.0); CGContextAddLineToPoint(ctx, 6.0, 50.0); CGContextAddLineToPoint(ctx, 18.0, 45.0); CGContextClosePath(ctx); CGContextFillPath(ctx); }
灰色の背景に対して追加すると、iPhone シミュレーターでこれが生成されます。
この 2 番目のコード例は、上で作成したものとほとんど同じです。インスタンス化するときに UIView フレームに提供できる柔軟なサイズを使用してこれを実装しました。基本的に、吹き出しの白い部分は黒いストローク オーバー レイで描かれます。
-(void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGRect aRect = CGRectMake(2.0, 2.0, (self.bounds.size.width * 0.95f), (self.bounds.size.width * 0.60f)); // set the rect with inset. CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); //white fill CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1.0); //black stroke CGContextSetLineWidth(ctx, 2.0); CGContextFillEllipseInRect(ctx, aRect); CGContextStrokeEllipseInRect(ctx, aRect); CGContextBeginPath(ctx); CGContextMoveToPoint(ctx, (self.bounds.size.width * 0.10), (self.bounds.size.width * 0.48f)); CGContextAddLineToPoint(ctx, 3.0, (self.bounds.size.height *0.80f)); CGContextAddLineToPoint(ctx, 20.0, (self.bounds.size.height *0.70f)); CGContextClosePath(ctx); CGContextFillPath(ctx); CGContextBeginPath(ctx); CGContextMoveToPoint(ctx, (self.bounds.size.width * 0.10), (self.bounds.size.width * 0.48f)); CGContextAddLineToPoint(ctx, 3.0, (self.bounds.size.height *0.80f)); CGContextStrokePath(ctx); CGContextBeginPath(ctx); CGContextMoveToPoint(ctx, 3.0, (self.bounds.size.height *0.80f)); CGContextAddLineToPoint(ctx, 20.0, (self.bounds.size.height *0.70f)); CGContextStrokePath(ctx); }
編集:
また、この投稿でブラッド・ラーソンの回答を参照することもできます
これがお役に立てば幸いです。
さらにサポートが必要な場合はお知らせください。