2

UIBezierPath型とUIColor型の2つのメンバー変数を使用してmyBezierPathsというクラスを作成し、このクラスのオブジェクトを使用してbezierpathを描画しようとしましたが、bezierpathを取得できません。以下は私のコードです。

//Bezierpath.h

@interface BezierPath : NSObject
{
UIBezierPath *m_bezierPath;
UIColor *m_pathColor;
}

@property (nonatomic, strong) UIBezierPath *bezierPath;
@property (nonatomic, strong) UIColor *pathColor;
@end


//drawingView.m


- (void)drawRect:(CGRect)rect
{ 
for (BezierPath *pathobj in m_pathArray) 
{ 
[pathobj.pathColor setStroke];
[pathobj.pathColor setFill];
[pathobj.bezierPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; 
} 
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
*self.myPath = [[BezierPath alloc] init];*

myPath.bezierPath.lineWidth = 5; 
myPath.bezierPath.lineCapStyle = kCGLineCapRound;
myPath.bezierPath.flatness = 0.0;
myPath.bezierPath.lineJoinStyle = kCGLineJoinRound;
myPath.bezierPath.miterLimit = 200.0;

self.myPath.pathColor = [UIColor redColor];

UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 

[myPath.bezierPath moveToPoint:[mytouch locationInView:self]];
[m_pathArray addObject:self.myPath];
}



- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
    [self.myPath.bezierpath addLineToPoint:[mytouch locationInView:self]];    

    [self setNeedsDisplay];    
}

返事を待って、私の説明がはっきりしていることを願っています

よろしくランジット

4

3 に答える 3

2

まず、あなたdrawRectは実際に形を埋めません。あなたはそれをストロークします(基本的に境界線を描きます)が、[pathObj.bezierPath fill];実際に形を色で塗りつぶすために呼び出す必要があります。

表示していないコードがたくさんあるので、問題がどこにあるのかを判断するのは困難です。メソッドにブレークポイントを作成して、drawRectすべての変数が存在するかどうかを判断します。たとえば、(私が想定している)配列であることを示しますm_pathArray。初期化されていますか?のプロパティがBezierPath正しく機能していることを確認しますか?私はあなたに変数touchesBeganを設定しているpathColorが、アクセス/読み取りのみしていることに気づきました。bezierPathそれは初期化されていますか?'m_bezierPath'インスタンス変数をどこに作成しますか?BezierPathinitメソッドで作成しますか、それともアクセス時に遅延インスタンス化しますか?

だから、それらはあなたがチェックできるいくつかのことです。

于 2012-06-22T12:11:04.757 に答える
0

あなたはあなたのイベントハンドラーを見せませんtouchesMovedが、私はこのようなものを期待します。それ以外の場合は、長さがゼロのパスのセットを作成するだけです。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 

[self.myPath.bezeirPath lineToPoint:[mytouch locationInView:self]];


}
于 2012-06-22T11:45:31.973 に答える
0

@Ranjitは私が同じ問題を抱えているいくつかの助けが必要です...私はUIbezierpathの色を変更したいと思います。しかし、色を選択すると、以前のパスも自動的に新しい色で色付けされます。

私の最初の画像で線を引き、選択した色は赤です。しかし、黄色を選択して別の線を描くと、前の線も黄色に変わります。(画像番号2)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2012-07-03T07:47:56.763 に答える