自动旋转设备时UIScrollView中的图形故障

时间:2012-11-18 19:16:54

标签: ios uiscrollview uiimageview

我有一个具有全屏UIScrollView的应用程序,其中有七个图像。图像也意味着全屏,滚动视图设置为启用分页。

我有一个创建或移动图像视图的方法:

-(void)rebuildImageView{

    // set up images
    float screenW = self.view.bounds.size.width;
    float screenH = self.view.bounds.size.height;
    int numImgs = self.soundNames.count;

    self.mainScrollView.contentSize = CGSizeMake(screenW * numImgs, screenH);
    for(int i=0; i<numImgs; i++){

        UIImageView* imageView = (UIImageView*)[self.mainScrollView viewWithTag:i+100];
        if(imageView == nil){
            imageView = [[UIImageView alloc] init];
            imageView.tag = i+100;
            [self.mainScrollView addSubview:imageView];
            imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"image%d.jpg",i]];
            imageView.contentMode = UIViewContentModeScaleAspectFill;
            imageView.clipsToBounds = YES;
            [imageView release];
        }
        imageView.frame = CGRectMake(i * screenW, 0, screenW, screenH);
    }

    // scroll to the current one
    [self.mainScrollView scrollRectToVisible:CGRectMake(self.currentSound*screenW, 0, screenW, screenH) animated:YES];
}

我在视图控制器上也有这个:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    [UIView animateWithDuration:duration animations:^{
        [self rebuildImageView];
    }];
}

当我在显示图像0时自动旋转时,此代码工作正常,但是当我在图像7上时,您可以在旋转时短暂地看到图像6的大部分。该视频展示了正在发生的事情:

http://www.youtube.com/watch?v=1O3jOcTgVP8

旋转设备时,我应该使用更好的方法重新配置滚动视图和图像吗?

1 个答案:

答案 0 :(得分:1)

willAnimateRotationToInterfaceOrientation:duration方法中放置的任何帧更改都应自动设置动画。所以你可以尝试从块中删除它吗?

就个人而言,我对这种类型的子类UIScrollView进行子类化并将等效的布局子视图帧代码放在layoutSubviews方法的覆盖中时运气得多(不要忘记调用)超级或你可能最终错误的滚动条)。