1

次のコードを使用して を に を描画していUIBezierPathます。しかし、それは緑の道を示していません。UIImageViewUIView

- (void)drawRect:(CGRect)rect
{
    [[UIColor blackColor] setStroke];
    [aPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{    
    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    self->aPath = [[UIBezierPath alloc]init];

    CAShapeLayer* greenPath = [CAShapeLayer layer];
    greenPath.path = aPath.CGPath;
    [greenPath setFillColor:[UIColor greenColor].CGColor];
    [greenPath setStrokeColor:[UIColor blueColor].CGColor];
    greenPath.frame=CGRectMake(0, 0,100,30);

    //add shape layer to view's layer
    [[imgView layer] addSublayer:greenPath];

    aPath.lineCapStyle=kCGLineCapRound;
    aPath.miterLimit=0;
    aPath.lineWidth=10;

    [aPath moveToPoint:[mytouch locationInView:imgView]];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [aPath addLineToPoint:[mytouch locationInView:imgView]];
    [imgView setNeedsDisplay];
}

UIBezierPathが描かれている場所に緑色の線を表示する必要があります。

4

1 に答える 1

1

あなたのコードには奇妙なことがたくさんありますが、実行されます。問題はここにあります

[imgView setNeedsDisplay];

あなたのコードでわかるように、あなたはそれを on で動作させたいのですが、 ondrawRectではなく、現在のビューdrawRectでのみ呼び出されます。setNeedsDisplayimgView

[self setNeedsDisplay];

そして、それはうまくいきます。内部で drawRect を処理するには、おそらく UIImageView をサブクラス化する必要があります。また、実際に画像を変更したいのではないかと推測しているため、描画しようとしています。画像コンテキストでの CoreGraphics の操作について読んでみてください。

その他の問題について

私が見ている主な問題は、CALayers と CoreGraphics を混同していることです。現在のところ、imageView に追加している CALayer は完全に使用されていません。drawRect移動するときに BezierPath を設定するだけで動作するはずです。

また、 を使用するときは注意してください。何に夢中になっているのか->理解してください。通常は、 に固執し@property、 と を使用することをお勧めself.myVar_myVarます。

于 2013-07-21T08:36:53.087 に答える