私は 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 メソッドはいつ、またはどのように呼び出されますか? たぶん、ここで途中で何かを見逃したのでしょう。