1

私は iTunesU(193P) で無料のスタンフォード コースを受講しており、UIView のサブクラスであるクラスのセットアップを作成し、scale というパブリック プロパティを作成しました。ピンチすると、それに応じてビューのスケールが変更されるという考えでしたが、プロパティのスケールのセッターがいつ呼び出されるかについて混乱しています。以下は関連するコードです。

@interface FaceView : UIView

@property (nonatomic) CGFloat scale; //anyone who wants do publicly can set my scale

-(void)pinch:(UIPinchGestureRecognizer *)gesture;

@end
@synthesize scale = _scale;

#define DEFAULT_SCALE 0.90

-(CGFloat)scale{
    if(!_scale){
        return DEFAULT_SCALE;
    }else {
        return _scale;
    }
}

-(void)setScale:(CGFloat)scale{
    NSLog(@"setting the scale");
    if(scale != _scale){
        _scale = scale;
        [self setNeedsDisplay];
    }
}

-(void)pinch:(UIPinchGestureRecognizer *)gesture{

    if ( (gesture.state == UIGestureRecognizerStateChanged) || (gesture.state == UIGestureRecognizerStateEnded)){

        self.scale *= gesture.scale;
        gesture.scale = 1;
    }
}

「ピンチモード」にあるとき、ピンチを止めるまで、NSLogステートメントが出力されるため、ピンチしているときにsetScaleメソッドが呼び出され続けます。プログラムで setScale メソッドを呼び出すコードがない場合、setScale メソッドはいつ、またはどのように呼び出されますか? たぶん、ここで途中で何かを見逃したのでしょう。

4

1 に答える 1

0

@cspam、ジェスチャー認識エンジンを設定するには2つのステップがあることを覚えておいてください
: UIViewController の UIView の場合。これは、この場合に UIViewController サブクラスに追加する必要がある不足しているコードです (Faceviewcontroller - 名前は異なる場合があります)。これが、上記の FaceView でピンチ メソッドを呼び出し続けるものです。

 UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self.faceView action:@selector(pinch)];  
[self.faceView addGestureRecognizer:pinchGesture];

このコードを UIViewController (サブクラス) の UIView のセッター メソッドに追加し [つまり、UIViewController の IBOutlet プロパティを作成し、ストーリーボードの UIView に接続します]、セッター メソッドをオーバーライドして上記のコードを含めます。

2) 2 番目の部分は、コード内にあるものです。そのため、コントローラーがピンチ ジェスチャを感知するたびに、pinch メソッドが呼び出されます。

お役に立てれば。

于 2012-06-05T11:01:41.657 に答える