我有一种情况,我有一个UIVcrollView作为成员的UIView子类。
我动画调整UIView的大小并使用它调整scrollview的大小。 UIScrollView是一个无限的图像库(即3个视图,当分页发生时将内容交换进出)
[UIView animateWithDuration: ...
当我为代码设置动画时,在动画块中我有
myView.frame = someNewFrame;
我认为动画会在动画时插入中间帧大小。即在动画的每一帧中进行调用:
[myView setFrame: someIntermediateFrame];
所以我覆盖了myView的setFrame方法:
-(void)setFrame:(CGRect)frame
{
[super setFrame:frame];
[self resizeSubviews];
}
- (void)resizeSubviews
{
CGRect frame = self.bounds;
scrollView.frame = frame;
scrollView.contentSize = CGSizeMake(frame.size.width * 3.0, frame.size.height); // 3 pages
[scrollView setContentOffset:CGPointMake(frame.size.width, 0.0) animated:NO]; // set contentOffset to middlePage
[scrollView setNeedsDisplay]; // just in case. don't know if this is necessary. Currently not helpful.
frame.origin.x = 0.0;
frame.origin.y = 0.0;
pageZeroRect = frame;
self.pageZero.frame = frame;
frame.origin.x += frame.size.width;
pageOneRect = frame;
self.pageOne.frame = frame;
frame.origin.x += frame.size.width;
pageTwoRect = frame;
self.pageTwo.frame = frame;
}
除了包含视图外,不会发生任何动画。 scrollview(和子视图)只是跳转到它的最终值。
任何想法出了什么问题?它没有意义。一切看起来都不错,但是我必须知道其他一些事情。我已经在iOS上编程了1。5年,所以我没有超级经验,但也不是那么愚蠢。
答案 0 :(得分:1)
我在一年后看到这个问题,一年更聪明,并且认为答案是覆盖我的UIView子类的layoutSubviews。
或将UIView的autoresizeSubviews属性设置为YES,并设置子视图的正确自动调整掩码。
答案 1 :(得分:0)
您是否尝试不覆盖setFrame方法?
如果它不起作用,请尝试在动画块中设置所有子视图的最终帧。