iPhoneの写真や地図はピンチインやピンチアウトで縮小拡大します。
そんなピンチについて書いたコードが意外となかったのでサンプルコードを書きました。
この例ではCALayerを縮小拡大しているのでAVFoundationを使っています。
ピンチインアウトで縮小拡大するコード(.m)
float beginGestureScale;
float effectiveScale;
- (void)viewDidLoad
{
[super viewDidLoad];
// 初期のスケールを設定する
effectiveScale = 1.0;
// ピンチのジェスチャーを登録する
UIGestureRecognizer *recognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchFrom:)];
recognizer.delegate = self;
[self.imageView addGestureRecognizer:recognizer];
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) {
// 適用されているスケールを覚えておく
beginGestureScale = effectiveScale;
}
return YES;
}
- (void)handlePinchFrom:(UIPinchGestureRecognizer *)recognizer
{
// 新しく適用するスケールを計算する (適用されているスケール x 新しくピンチしたスケール)
effectiveScale = beginGestureScale * recognizer.scale;
// スケールをビューに適用する
[self.imageView.layer setAffineTransform:CGAffineTransformMakeScale(effectiveScale, effectiveScale)];
}