ビューには、フレーム (スーパービューの座標系の座標) と境界 (独自の座標系の座標) の両方のプロパティがありますが、ビューを変換する場合は、フレーム プロパティを使用したり依存したりしないでください。変換を使用している場合、変換は境界に適用されますが、必ずしもフレームに正確に反映されるとは限らないため、フレーム プロパティではなく、境界プロパティのみを操作します。
http://iphonedevelopment.blogspot.jp/2008/10/demystifying-cgaffinetransform.html
私は彼が上のパラグラフで何を意味するのかを知りたかったので、'frame' と 'bounds' を印刷
しました。
- (IBAction)handlePinch:(UIPinchGestureRecognizer*)recognizer
{
NSLog(@"scale: %f, velocity: %f", recognizer.scale, recognizer.velocity);
NSLog(@"Before, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
NSLog(@"After, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds));
recognizer.scale = 1;
}
出力:(ズームイン)
2012-07-02 14:53:51.458 GestureRec[1264:707] scale: 1.030111, velocity: 0.945660
2012-07-02 14:53:51.466 GestureRec[1264:707] Before, frame: {{0, 124}, {320, 160}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.473 GestureRec[1264:707] After, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.480 GestureRec[1264:707] scale: 1.074539, velocity: 1.889658
2012-07-02 14:53:51.484 GestureRec[1264:707] Before, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.494 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.499 GestureRec[1264:707] scale: 1.000000, velocity: 1.889658
2012-07-02 14:53:51.506 GestureRec[1264:707] Before, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}
2012-07-02 14:53:51.510 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}}
私は何かを誤解していますか、それともブログの著者が間違っていますか?