调整scrollView框架的大小时,UIScrollView子视图的调整大小不正确

时间:2011-11-04 16:46:22

标签: ios objective-c uiview uiscrollview uiviewanimation

我有一种情况,我有一个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年,所以我没有超级经验,但也不是那么愚蠢。

2 个答案:

答案 0 :(得分:1)

我在一年后看到这个问题,一年更聪明,并且认为答案是覆盖我的UIView子类的layoutSubviews。

或将UIView的autoresizeSubviews属性设置为YES,并设置子视图的正确自动调整掩码。

答案 1 :(得分:0)

您是否尝试不覆盖setFrame方法?

如果它不起作用,请尝试在动画块中设置所有子视图的最终帧。