Objective c 为什么这是UIImageView自动输入本身?

Objective c 为什么这是UIImageView自动输入本身?,objective-c,cocoa-touch,ios,uiscrollview,uiimageview,Objective C,Cocoa Touch,Ios,Uiscrollview,Uiimageview,我在另一个UIScrollView的UIScrollView中有一个UIImageView(基于苹果的 )。当UIScrollView回调其控制器以解除其自身时,它将调用此方法: - (void)dismiss { [scrollView removeFromSuperview]; ImageScrollView *isv = [self currentImageScrollView]; UIImage *image = isv.imageView; image.

我在另一个UIScrollView的UIScrollView中有一个UIImageView(基于苹果的 )。当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
方法之前。如果图像大于其新的超级视图,则它会跳跃,以便其左边缘与其超级视图的左边缘对齐。如果它比新的超级视图小,它会跳到视图的中心。此更改没有动画

所以我的问题是,我如何防止它这样做?我调整了super view(
self.view
)类和image view类,以查看可以调用哪些方法。调用此方法后,在图像视图上既不设置帧也不设置中心,而在超级视图上调用
layoutSubviews
方法时,这并不是将图像跳到超级视图的中心或左侧的原因。我还尝试在超级视图中关闭
autoResizesSubviews
,并将图像视图的
autoresizingMask
设置为
uiviewsautoresizingnone
,行为没有改变

那么这在哪里发生,为什么?更重要的是,我如何让它停止


好几天来我一直在为这件事绞尽脑汁。任何指示或指导都将不胜感激。

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

ImageScrollView
是以UIImageView为中心的视图。在
ImageScrollView布局子视图中设置一个断点,您将看到UIImageView是如何居中的

您正在获取
ImageScrollView
的内部
imageView
并将其放置到另一个视图中。这是行不通的,因为
ImageScrollView
仍保留该
UIImageView
实例的所有权,并且仍在管理其布局


您需要将图像复制到另一个
UIImageView
实例中,或者您需要更改
ImageScrollView
以允许它放弃其
imageView
的所有权。谢谢,这似乎很明显,不是吗?我担心我会把这个例子说得太简单。不幸的是,事实上,我在这段代码中以各种方式设置了框架。无论我把它放在哪里,它都会去,但一旦这个方法完成执行,它仍然会立即转移到它的新超级视图的中心。我已经更新了示例代码以反映这种糟糕的情况。您没有发布正确的代码。UIScrollView没有imageView属性,UIImage没有frame属性。Darren-我使用的是UIScrollView的一个子类,基于Apple的,它有一个
imageView
ivar,我只是为其添加了一个访问器。我已将该类更改为
ImageScrollView
,它是具有
imageView
属性的子类。谢谢你的帮助。我已经尝试在
ImageScrollView
上设置一个标志,这样
layoutSubviews
在我的
UIScrollView
子类中不做任何操作就返回。它没有效果;图像仍然居中。此外,在我的示例代码中,包含ImageScrollView的UIScrollView将从其superview中删除。所以事实上,
layoutSubviews
根本没有被调用——至少在我的
-discouse
方法完成执行之后没有调用。我会再愚弄它一些,但我很确定
layoutSubviews
不是罪魁祸首——呃,除非是父UIScrollView才是原因。下一步必须检查。只是摆弄,没有乐趣-(请注意,
scrollView
已从其超级视图中删除。这会阻止在
scrollView
UIScrollView
ImageScrollView
中调用
LayoutSubview
,或者至少在执行此代码后不会调用它们。但是,我注意到图像在只是,不是垂直的。Hrm。可能是在我的
discover
方法之前调用了“代码到中心”,但它的效果随后发生了?对此非常困惑……好吧,只是再次尝试,并清理了一下,发现你完全正确,Darren。天啊,天啊,我很高兴终于解决了这个问题。很多人都不知道谢谢你的回答。哦,顺便说一句,让它工作的关键是删除了行“[scrollView removeFromSuperview];”。出于某种奇怪的原因,有了它,它继续进行居中。我不明白,但很高兴问题得到解决。