为什么这个UIImageView会自动进入?

时间:2011-03-13 07:32:18

标签: objective-c cocoa-touch ios uiscrollview uiimageview

我在另一个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,但行为没有变化。

那么这是怎么回事?为什么?更重要的是,我该如何让它停止?

我这几天一直在打我的脑袋。任何指针或指导都将非常感激。

2 个答案:

答案 0 :(得分:1)

当您将其作为子视图插入时,您没有设置“图像”视图的框架。如果您希望视图显示在滚动视图中的特定位置,您可能希望明确地这样做。

答案 1 :(得分:1)

ImageScrollView是以UIImageView为中心的那个。在ImageScrollView layoutSubviews中设置一个断点,你会看到你的UIImageView是如何居中的。

您正在使用ImageScrollView的内部imageView并将其置于另一个视图中。这不起作用,因为ImageScrollView仍保留该UIImageView实例的所有权,并且仍在管理其布局。

您需要将图片复制到另一个UIImageView实例中,或者您需要更改ImageScrollView以允许其放弃其imageView的所有权。