2

我必须像照片应用程序一样实现旋转工作。有UIImageView里面一个UIScrollView。当设备旋转时,我希望图像像照片一样旋转到横向。如果图像是横向的,那么它将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不正确,或者图像没有填满宽度。即使我在转换之前更改了订单框架和内容大小,仍然不正确。

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

4

3 回答 3

1

WWDC 2010视频:使用滚动视图设计应用程序向您展示了如何做到这一点。

于 2013-01-04T06:34:45.733 回答
1

在我看来,正确的答案是根本不要自己为旋转设置动画。

如果你按照最新的iOS 6指导方针工作,那么你只需重新安排你的views方法。ViewControllerlayoutSubviews()

于 2012-10-08T09:00:15.660 回答
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;
}
于 2013-08-14T18:06:52.440 回答