three finger pinch with custom uigesture on uiscrollview - ios

I have a uiscroll that allows pinching, panning and single/doubletap functionality. I would like to add a three finger pinch in/out to trigger something else in my app. Pinch in and do this, pinch out and do that.
The builtin scroll pinch allows 2 fingers by default. How would I add a third? Subclass? Do I have to remove the gestures already on the scrollview?

Create your own custom subclass gesture to handle the three pinch gesture. Act as it's delegate so you can instruct it to be active at the same time as other gestures. Require it to only start when there are 3 touches. You don't need to remove / replace the standard gestures on the scroll view.

Related

Gesture Recognisers and Touch Began for a View in Swift

I have a View. In that view I added a gestureRecogniser for Pan,Rotate and Pinch. Recogniser takes small amount of time to detect it as a Gesture. But When I add touchesBegan function It detects the touch when I touch the finger to the screen without any delay. Any suggestion to Solve. I need GestureRecogniser for Pinch and Rotate the View. For Panning I need to use TouchesBegan function. How can i Keep both those things in a View

UIPageViewController: Swipe registration

I would like to achieve an animation when swiping from page to page on a UIPageViewController. I would like this animation to be linked to a UISwipeGestureRecognizer.
My question is: can I calculate a beginning and end of a swipe gesture and relatively execute an CGAffineTransform?
So I during the swipe, I want to transform a view in the direction of the swipe.
Who has any good tutorials or snippets I could use?
A couple of things.
Page view controllers are not built to use custom animations between pages. They are intended to use either a slide animation or a page curl animation.
Second, swipe gestures are single-shot, not continuous. There is no "relatively execute." When you do a swipe gesture, nothing happens, then the gesture fires and it's over. If you want an animation that's proportional to the user's finger position in the gesture you'll either need to do some specialized handling of a pan gesture recognizer or create your own custom gesture recognizer.

Disable scroll in UIScrollView while multi touching

In my program I use two fingers to pinch (zoom in and out), so sometimes when I want to pinch, app scrolls.
I would like to don't let scrolling in UIScrollView while two or more touches are on screen. How can I achieve that?
Try using UIGestureRecognizer.
In you case you must use a UITapGestureRecognizer, with 2 finger and one tap.
Attach the gesture on the table view.

Can I pass a pinch gesture recognizer to a ScrollView to have it zoom?

I wrote a custom pinch gesture recognizer for my ScrollView's zooming, and I handle pinch touches in a method in my view controller.
But in some cases, I want the ScrollView to behave exactly as it would normally behave (if it used the standard pinch gesture recognizer that comes with ScrollView).
Is there some way that in such cases I can pass my custom gesture recognizer to the ScrollView and it would use that recognizer to scale the view as it normally would?
Could I pass the gesture recognizer to the selector that is triggered by pinch actions?
I have not tried this, but here's an idea:
When you set your own gestureRecognizer, store the ScrollView's pinchGestureRecognizer in an iVar. You should then be able to dynamically exchange your gestureRecognizer and the original one.
As of iOS 5 UIScrollView exposes a pinchGestureRecognizer property, but this is read-only. To get it to use your own instead you have to subclass UIScrollView and overwrite this property hoping that internally UIScrollView also uses this property to get the gesture recognizer to add when zooming is enabled.
However it is quite dangerous messing with scroll view's gesture recognizers, especially to modify their behavior. Even just having a different delegate will trigger an exception. So proceed at your own risk.

UIScrollView zoomed won't produce swipe

I have a UIScrollView with zooming enabled, and a swipe gesture recognizer setup. When the user is not zoomed, the swipes come through great, but as soon as the user zooms in, the swipe won't come through.
My swipe recognizer is applied to the imageview, and I have tried to apply it to the scroller also. When zoomed, no go.
Is there a secret to getting the swipe while zoomed?
Thanks in advance!
Rob
Where is your swipe gesture recognizer?
Have you tried setting scrollView setCanCancelContentTouches:NO?
Is there a secret to getting the swipe
while zoomed?
Yes, there is. Each UIImageView should be inside its own UIScrollView which in turn are inside of main UIScrollView. No gesture recognizers are needed, just set UIScrollViews options like zoom scales etc and implement UIScrollViewDelegate methods for master UIScrollView.

Resources