2011-01-12 14 views
2

ちょっと客観Cのイム初心者は、私は次のコードを作成したが動作しないタッチイベントでラインを描く方法は?

に私を助けてください.....

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

UITouch *touch = [touches anyObject]; 
if ([touch view] == self.view) { 

    CGPoint location = [touch locationInView:self.view]; 
    loc1 = location; 
    CGContextMoveToPoint(context, location.x, location.y); 
    NSLog(@"x:%d y:%d At Touch Begain", loc1.x, loc1.y); 
} 
} 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 

{ 
    UITouch *touch = [touches anyObject]; 

     if ([touch view] == self.view) 
    { 
    CGPoint location = [touch locationInView:self.view]; 
    CGContextMoveToPoint(context, loc1.x, loc1.y); 
    NSLog(@"x:%d y:%d At Touch Move", loc1.x, loc1.y); 
    CGContextAddLineToPoint(context, location.x, location.y); 
    NSLog(@"x:%d y:%d", location.x, location.y); 
} 

} 

私はviewDidLoadメソッドにコンテックスを宣言しても、タッチイベントに宣言しようではなく、仕事...

マイアプリのログファイルを見てのような...

X:0、Y:タッチ移動木1月13日午前11時20分05秒.localの ドラッグアンドドロップで1079934976 [536 ]:

CGContextAddLineToPoint:無効なコンテキスト0x0の2011-01-13 11:20:05.149 ドラッグアンドドロップ[536:207] X:0、Y:1079902208木1月13日11時20分05秒.LOCAL ドラッグアンドドロップ[536]。

CGContextSetRGBStrokeColor:無効なコンテキスト0x0の木1月13日11時20分05秒 .LOCALドラッグアンドドロップ[536]:

CGContextDrawPath:無効なコンテキスト0x0の木1月13日11時20分05秒.LOCAL ドラッグアンドドロップ[536]。

CGContextMoveToPoint:無効なコンテキスト0x0 2011-01-13 11:20:0 5.199 ドラッグアンドドロップ[536:207] X:0、Y:

CGContextAddLineToPoint:無効なコンテキスト0x0の2011-01-13 11:20 1079934976をタッチ移動木1月13日11時20分05秒 .LOCALドラッグアンドドロップ[536]に:05.200 ドラッグアンドドロップ[536:207]のx:0、Y:1079885824

答えて

13

通常、タッチ検出方法では直接描画しません。 通常、新しいポイント/ラインをそこに保存して、すべてをdrawRect:に描画します。 UIViewのカスタムサブクラスがあり、NSMutableArrayタイプのインスタンス変数pathsUIBezierPathタイプのプロパティcurrentPathがあるとします。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    self.currentPath = [UIBezierPath bezierPath]; 
    currentPath.lineWidth = 3.0; 
    [currentPath moveToPoint:[touch locationInView:self]]; 
    [paths addObject:self.currentPath]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.currentPath addLineToPoint:[touch locationInView:self]]; 
    [self setNeedsDisplay]; 
} 

- (void)drawRect:(CGRect)rect { 
    [[UIColor redColor] set]; 
    for (UIBezierPath *path in paths) { 
    [path stroke]; 
    } 
} 

これは多くのことが簡略化されていることに注意してください。多くの線を描画すると、パフォーマンスが低下し、最終的には、ビットマップイメージに図面をキャッシュする必要がありますが、これで作業が開始されます。

0

あなたはAddLineToPointを呼び出した後CGContextStrokePathを呼び出す必要があります。 最初にストロークパスの色を定義してください。

CGContextSetRGBStrokeColor(context,0,0,1,1); 
CGContextStrokePath(context); 
関連する問題