Objective c 为什么这是UIImageView自动输入本身?
我在另一个UIScrollView的UIScrollView中有一个UIImageView(基于苹果的 )。当UIScrollView回调其控制器以解除其自身时,它将调用此方法: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.
- (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];”。出于某种奇怪的原因,有了它,它继续进行居中。我不明白,但很高兴问题得到解决。