0

ユーザーがiPadで指を動かす長方形を描画しようとしています:

ViewController のインターフェース:

@interface ViewController : UIViewController {
    NSMutableArray *paths;
}

実装:

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

    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInView:self.view];

        CGRect aRectangle = CGRectMake(location.x, location.y, 40, 40);
        UIBezierPath *path = [UIBezierPath bezierPathWithRect:aRectangle];

        path = [UIBezierPath bezierPathWithOvalInRect:aRectangle];

        [paths addObject:path];       
    }
}

- (void)drawRect:(CGRect)rect {
    for (UIBezierPath *path in paths) {
        [path fill];
    }
}

しかし、画面には何も描画されません...ビューに更新して呼び出すように指示しなかったのではないかと思いましたdrawRectが、iPadのホーム画面に移動してアプリを再入力しようとしましたが、まだ何も表示されませんか?

(ポイントの配列を使用するつもりでしたが、CGPointそれは残るオブジェクトではないため、可変配列に追加することはできず、ローカルスコープが終了すると消えます。どうすれば配列になることができますかポイントの代わりに?)

4

2 に答える 2

3

drawRectからの方法ですUIViewが、そうではありませんUIViewControllerUIViewInterface Builder を使用して UI 構造を構築している場合は、カスタムサブクラスを作成して上書きdrawRectし、カスタム ビュー クラスを XIB/NIB のビューにバインドする必要があります。

iPhoneを参照してください: drawRect が呼び出されないのはなぜですか?

于 2012-04-21T04:55:33.593 に答える
1

まず、これらのメソッドをUIViewではなく に実装する必要がありUIViewControllerます。


次に、自分で drawRect を呼び出さないでください。

ビューにそれ自体を更新して drawRect を呼び出すように指示しなかったのではないかと思いました

ビューで次の描画サイクル/フレームを再描画する場合は、-setNeedsDisplay を呼び出します。

于 2012-04-21T05:02:44.087 に答える