私はクラスの課題に取り組んでおり、少しの方向性が必要です。私は、タッチイベントとそれに続く指のドラッグをスクリーン上の図に変換するアプリケーションを使って作業しています。私は配列内の各図面を保存する方法を理解し、シェイクイベントに応答してそれらをすべて削除する必要があります。iPhone - タッチイベントに応じて画面に描画
これはかなり基本的です - HomeViewController(UIViewController)と、そのウィンドウを占めるDoodleView(UIView)があります。 HomeViewControllerにはdoodleviewプロパティがあり、viewDidLoadメソッドでインスタンスを作成し、self.doodleviewに割り当ててからaddSubviewを呼び出します。 touchesBegan、touchesMoved、touchesEndedメソッドはdoodleviewクラスに属します。今すぐクリックしてドラッグすると、前のものが削除されます。
私の最初のスタブを保存すると、それぞれのtouchesBeganイベントがdoodleViewの新しいインスタンスを作成していて、その配列の最後の要素でaddSubviewを呼び出すだけで、HomeViewControllerのNSMutableArray "doodleViews"プロパティを作成しました。これはうまくいかず、理由はわかりません。任意のヒントが評価されます。ここで
はHomeViewControllerからの抜粋です:ここでは
- (void)viewDidLoad {
[super viewDidLoad];
CGRect window = [[UIScreen mainScreen] bounds];
self.doodleView = [[DoodleView alloc] initWithFrame:window];
CircleGestureRecognizer *recognizer = [[CircleGestureRecognizer alloc] initWithTarget:self action:@selector(handleCircleRecognizer:)];
[self.doodleView addGestureRecognizer:recognizer];
[self.view addSubview:self.doodleView];
}
はDoodleViewからの抜粋です:
- (void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event
{
NSLog(@"touches began");
path = [UIBezierPath bezierPath];
path.lineWidth = 15.0f;
path.lineCapStyle = kCGLineCapRound;
path.lineJoinStyle = kCGLineJoinRound;
UITouch *touch = [touches anyObject];
[path moveToPoint:[touch locationInView:self]];
}
- (void) touchesMoved:(NSSet *) touches withEvent:(UIEvent *) event
{
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:self]];
[self setNeedsDisplay];
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
[path addLineToPoint:[touch locationInView:self]];
[self setNeedsDisplay];
}
私はそれを試して、私は0の要素を得ています:[self.drawings addObject:path]; NSLog(@ "%d"、self.drawings.count);また、描画はリアルタイムで行われるため、指が動くとdrawRectが呼び出され、それに沿って[パスストローク]が呼び出されます。 @David; – David
;私は見るために私の前にそのタイプのプロジェクトを持っていませんが。 [self.drawing addObject:[path copy]]を試してみましたか? – NJones