2012-01-25 9 views

答えて

38

あなたはUITapGestureRecognizerを実装する必要がある - ドキュメントhere - あなたのViewControllerで

- (void)viewDidLoad 
{ 
    [super viewDidLoad];  

    // what object is going to handle the gesture when it gets recognised ? 
    // the argument for tap is the gesture that caused this message to be sent 
    UITapGestureRecognizer *tapOnce = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnce:)]; 
    UITapGestureRecognizer *tapTwice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTwice:)]; 

    // set number of taps required 
    tapOnce.numberOfTapsRequired = 1; 
    tapTwice.numberOfTapsRequired = 2; 

    // stops tapOnce from overriding tapTwice 
    [tapOnce requireGestureRecognizerToFail:tapTwice]; 

    // now add the gesture recogniser to a view 
    // this will be the view that recognises the gesture 
    [self.view addGestureRecognizer:tapOnce]; 
    [self.view addGestureRecognizer:tapTwice]; 

} 

は基本的にこのコードはUITapGestureself.viewに登録されている場合の方法tapOnceまたはtapTwiceselfに呼び出されることを言っていますそのシングルまたはダブルタップに応じて。そのため、あなたのUIViewControllerにこれらのタップのメソッドを追加する必要があります。ダブルタップでズームする二回

+0

あなたの答えをありがとうございました、私はそれをテストして報告しますが、できるだけ早く持っていました。 – Bruno

+0

これは可能ですWebviewはサイドウェブビューのリンクに触れることを認識します – Codesen

+2

[tapOnce requireGestureRecognizerToFail:tapTwice];まさに私が探していたものです。ありがとう! – Bastek

2

スウィフト3.0バージョンを助け

- (void)tapOnce:(UIGestureRecognizer *)gesture 
{ 
    //on a single tap, call zoomToRect in UIScrollView 
    [self.myScrollView zoomToRect:rectToZoomInTo animated:NO]; 
} 
- (void)tapTwice:(UIGestureRecognizer *)gesture 
{ 
    //on a double tap, call zoomToRect in UIScrollView 
    [self.myScrollView zoomToRect:rectToZoomOutTo animated:NO]; 
} 

希望。

@IBOutlet weak var scrollView: UIScrollView! 
@IBOutlet weak var imageView: UIImageView! 

(通常のviewDidLoadで)どこか:

let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(onDoubleTap(gestureRecognizer:))) 
tapRecognizer.numberOfTapsRequired = 2 
scrollView.addGestureRecognizer(tapRecognizer) 

ハンドラ:

func onDoubleTap(gestureRecognizer: UITapGestureRecognizer) { 
    let scale = min(scrollView.zoomScale * 2, scrollView.maximumZoomScale) 

    if scale != scrollView.zoomScale { 
     let point = gestureRecognizer.location(in: imageView) 

     let scrollSize = scrollView.frame.size 
     let size = CGSize(width: scrollSize.width/scale, 
          height: scrollSize.height/scale) 
     let origin = CGPoint(x: point.x - size.width/2, 
          y: point.y - size.height/2) 
     scrollView.zoom(to:CGRect(origin: origin, size: size), animated: true) 
     print(CGRect(origin: origin, size: size)) 
    } 
} 
関連する問題