Right now I have a view that is outside of the UIScrollView. For many reasons, it cannot be simply inside the scrollview. So right now what i'm doing is, as the UIScrollView is scaled/panned, I update my other auxiliary view. The only issue i'm coming into is, the zoomScale value is not adjusted for while the view is bouncing back to either the minimum or maximum scale. Any suggestions on how to obtain this value while it animates back?
Sample code:
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, appSize.width, appSize.height)];
self.scrollView.contentSize = CGSizeMake(appSize.width * 2, appSize.height * 2);
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.scrollView.delegate = self;
self.scrollView.bounces = YES;
self.scrollView.bouncesZoom = YES;
self.scrollView.alwaysBounceHorizontal = YES;
self.scrollView.alwaysBounceVertical = YES;
self.scrollView.showsHorizontalScrollIndicator = YES;
self.scrollView.showsVerticalScrollIndicator = YES;
self.scrollViewZoomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,
appSize.width * 2,
appSize.height * 2)];
[[self scrollView] addSubview:self.scrollViewZoomView];
float minZoomScale = 2.0f;
self.scrollView.minimumZoomScale = minZoomScale;
self.scrollView.maximumZoomScale = 1.0f;
self.scrollView.zoomScale = self.scrollView.minimumZoomScale;
and then on self
-(void) scrollViewDidZoom:(UIScrollView *)scrollView {
float scale = [scrollView zoomScale];
[self updateAuxViewScale:scale];
}
Thanks to this answer it becomes clear that one can use the
presentationLayer
to get the correct values. I created aUIScrollView
category
to add special getters forzoomScale
,contentOffset
andcontentSize
which return the correct values even if theUIScrollView
is animating.You can find the repo here: https://github.com/bddckr/BDDRScrollViewExtensions
As per my knowledge, if you want to know current zoom level, you should use following delegate method for UIScrollView
Hope this will be useful to you.
Enjoy Programming!!
You should use a different UIScrollViewDelegate method.
According to the docs: https://developer.apple.com/library/ios/#documentation/uikit/reference/uiscrollviewdelegate_protocol/Reference/UIScrollViewDelegate.html
"The scroll view also calls this method after any “bounce” animations."
Okay, I think I may have found something that will help you. In this related thread In iOS 4.0, why does UIScrollView zoomToRect:animated: not trigger the scrollViewDidScroll or scrollViewDidZoom delegates while animating?, there are two answers that may be of use to you.
Personally, I think I would give the first solution a shot. Hope I understand the question and this is helpful. If not.. apologies and most blissful coding!
The bouncing back of the zoom is an animation, so the property
zoomScale
is immediately the target value of the animation, even if the animation is still running. If you would like to apply the same zoom scale that the scroll view has to another view, here is a way to retrieve it:-scrollViewDidScroll:
check whether the content view has animations.That approach is not elegant, but it works. Here is some code to get you started: