我在另一个UIScrollView的UIScrollView中有一个UIImageView(基于Apple的 PhotoScroller sample code)。当UIScrollView回调给它的控制器以解除它自己时,它调用这个方法:
- (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];
}
现在这里是一个奇怪的部分:图像视图在此方法执行后立即跳转到不同的位置,但在委托上调用scollViewDidClose
方法之前。如果图像大于其新的超视图,则它会跳跃,使其左边缘与其超视图的左边缘对齐。如果它比新的超级视图小,它会跳转到视图的正中心。这种变化没有动画。
所以我的问题是,我该怎样阻止它这样做?我已经调整了超级视图(self.view
)类和图像视图类,以查看可能调用的方法。调用此方法后,在图像视图中都不会设置框架和中心,并且在超级视图上调用layoutSubviews
方法时,不会将图像跳转到超视图的中心或左侧。我还尝试在超级视图中关闭autoResizesSubviews
,并将图片视图的autoresizingMask
设置为UIViewAutoresizingNone
,但行为没有变化。
那么这是怎么回事?为什么?更重要的是,我该如何让它停止?
我这几天一直在打我的脑袋。任何指针或指导都将非常感激。
答案 0 :(得分:1)
当您将其作为子视图插入时,您没有设置“图像”视图的框架。如果您希望视图显示在滚动视图中的特定位置,您可能希望明确地这样做。
答案 1 :(得分:1)
ImageScrollView
是以UIImageView为中心的那个。在ImageScrollView layoutSubviews
中设置一个断点,你会看到你的UIImageView是如何居中的。
您正在使用ImageScrollView
的内部imageView
并将其置于另一个视图中。这不起作用,因为ImageScrollView
仍保留该UIImageView
实例的所有权,并且仍在管理其布局。
您需要将图片复制到另一个UIImageView
实例中,或者您需要更改ImageScrollView
以允许其放弃其imageView
的所有权。