在UIScrollView问题中旋转UIImageView

时间:2012-10-08 08:13:10

标签: ios uiscrollview uiimageview rotation

我必须像照片应用程序一样实现旋转工作。将UIImageView放在UIScrollView内。当设备旋转时,我希望图像像Photo一样旋转到风景。如果图像是横向图像,那么它将使用旋转动画填充整个UIScrollView的宽度。当以下代码

[UIView animateWithDuration:0.36
               animations:^(void){
                [_imageView setTransform:CGAffineTransformMakeRotation(M_PI*90/180)];
                 _imageView.frame = CGRectMake(0, 0, 480, 320); //set the frame after the rotate
                self.contentSize = CGSizeMake(480, 320); //set the content-size of the scrollview
               }
               completion:^(BOOL complete){
               }];

但这不起作用。旋转发生,但_imageView的位置不正确,或图像没有填充宽度。即使我在变换之前更改了顺序框架和内容大小,仍然不正确。

有这个的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

在我看来,正确的答案是不要自己制作轮换动画。

如果您按照最新的iOS 6指南工作,那么您只需在views ViewController方法中重新排列layoutSubviews()

答案 1 :(得分:1)

WWDC 2010 Video: Designing Apps with Scrolls Views向您展示了如何执行此操作。

答案 2 :(得分:0)

@CoDEFRo引用的源代码类似于以下内容,但在这里我将它放入UIScrollView的委托方法scrollViewDidScroll:。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {   
    CGSize boundsSize = scrollView.bounds.size;
    CGRect frameToCenter = self.imageView.frame;

    if (frameToCenter.size.width < boundsSize.width)
        frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
    else
        frameToCenter.origin.x = 0;

    if (frameToCenter.size.height < boundsSize.height)
        frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
    else
        frameToCenter.origin.y = 0;

    self.imageView.frame = frameToCenter;
}