I have a UIImageView in a UIScrollView in another UIScrollView (based on Apple’s
PhotoScroller sample code). When the UIScrollView calls back to its controller to dismiss itself, it calls this method:
- (void)dismiss {
[scrollView removeFromSuperview];
ImageScrollView *isv = [self currentImageScrollView];
UIImage *image = isv.imageView;
image.frame = [self.view convertRect:image.frame fromView:isv];
[self.view insertSubview:image belowSubview:captionView];
[(NSObject *)delegate performSelector:@selector(scrollViewDidClose:)
withObject:self
afterDelay:2.0];
}
Now here’s the weird part: the image view jumps to a different position right after this method executes, but before the scollViewDidClose method gets called on the delegate. If the image is larger than its new super view, it jumps so that its left edge is aligned with the left edge of its super view. If it’s smaller than its new super view, it jumps to the very center of the view. There is no animation to this change.
So my question is, how do I prevent it from doing that? I’ve tweaked both the super view (self.view) class and the image view class to see what methods might be called. Neither the frame nor the center is set on the image view after this method is called, and while the layoutSubviews method is called on the super view, that is not what jumps the image to the center or left side of the superview. I’ve also tried turning off autoResizesSubviews in the super view, and setting the autoresizingMask of the image view to UIViewAutoresizingNone, with no change in behavior.
So where is this happening, and why? And more importantly, how do I make it stop?
I’ve been beating my head on this for days. Any pointers or guidance would be greatly appreciated.
ImageScrollViewis the one centering your UIImageView. Set a breakpoint inImageScrollView layoutSubviewsand you’ll see how your UIImageView is being centered.You’re taking
ImageScrollView‘s internalimageViewand placing it into another view. That’s not going to work becauseImageScrollViewstill retains ownership of thatUIImageViewinstance and is still managing its layout.You’ll either need to copy the image into another
UIImageViewinstance, or you’ll need to changeImageScrollViewto allow it to relinquish ownership of itsimageView.