IOS zoomToRect with duration

Possible duplicate:
Any way to change zoomToRect duration for UIScrollView?

Is there a way to reproduce the behavior of [UIScrollView zoomToRect: zoomRect animated: YES] so that the animation continues for a given duration?

+7
source share
3 answers

You can put this in your subclass of UIScrollView :

 - (void)zoomToRect:(CGRect)rect animated:(BOOL)animated { [UIView animateWithDuration:(animated?0.3f:0.0f) delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ [super zoomToRect:rect animated:NO]; } completion:nil]; } 
+17
source

How about using:

 [UIView beginAnimations:@"" context:nil]; [UIView setAnimationDuration:2.0]; //Or any other duration [theScroll setContentOffset:offsetPoint]; //offsetPoint is a CGPoint that defines the point you want your scroller to show [UIView commitAnimations]; 

The disadvantage is that you need to calculate the exact CGPoint to achieve the desired offset.

0
source

I managed to implement zoomToRect using some CA3DTransforms. I insert the code here if anyone is interested.

I needed to keep a reference to the original scrollView frame for this.

 rect.origin.x = ((int)rect.origin.x) % (int)self.initialFrame.size.width; float scale = MIN(self.initialFrame.size.width / rect.size.width,self.initialFrame.size.height / rect.size.height); CGSize scaledFrameSize = CGSizeMake(self.initialFrame.size.width / scale, self.initialFrame.size.height / scale); CGPoint middleOfFrame = CGPointMake(self.initialFrame.size.width / 2 ,self.initialFrame.size.height / 2); CGPoint transformPoint = CGPointMake(rect.origin.x + scaledFrameSize.width / 2,rect.origin.y + scaledFrameSize.height/2); CGPoint offsetToCenter = CGPointMake((scaledFrameSize.width - rect.size.width) / 2 * scale,( scaledFrameSize.height - rect.size.height)/ 2 * scale); [UIView animateWithDuration:1 animations:^ { self.layer.transform = CATransform3DConcat(CATransform3DConcat(CATransform3DConcat(CATransform3DMakeTranslation(middleOfFrame.x,middleOfFrame.y, 0), CATransform3DMakeTranslation(-transformPoint.x, -transformPoint.y,0)), CATransform3DMakeScale(scale, scale, 1)), CATransform3DMakeTranslation(offsetToCenter.x, offsetToCenter.y, 0)); }]; 
0
source

All Articles