像在Photos.app中一样旋转UIImageView

时间:2013-06-21 17:49:58

标签: ios uiscrollview uiimageview rotation

我不确定此事是否曾被直接询问,但如果有,我道歉。我试图完成的几乎所有工作都是在UIScrollView中旋转一个子视图的UIImageView,就像它在Photos.app中一样。

S.O周围有许多链接显示旋转图像本身的代码,但我不确定这是否是在Photos.app中完成的方式。

如果有人能够在Photos.app中完成它的工作方式,那就太棒了!

谢谢!

1 个答案:

答案 0 :(得分:0)

我不明白您对照片应用的意思,但旋转视图的方法并不多。基本上有两种方法:第一种方法是应用CGTransformation,如下例所示:

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
        [imgView setImage:[UIImage imageNamed:@"polaroid_spacer"]];
        [self addSubview: imgView];
        [UIView animateWithDuration:0.3f delay:5.f options:UIViewAnimationOptionCurveEaseIn animations:^{
            [imgView setTransform:CGAffineTransformMakeRotation(M_PI_2)];
        } completion:NULL];

另一种方法是将CATransform应用于视图的图层:

//be sure to include quartz
#import <QuartzCore/QuartzCore.h>

    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];

    [imgView setImage:[UIImage imageNamed:@"polaroid_spacer"]];

    [self addSubview: imgView];

    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
    [anim setToValue: [NSValue valueWithCATransform3D: CATransform3DMakeRotation(M_PI_2, 0, 0, 1)]];
    [anim setDuration: 3.f];
    [anim setBeginTime: (CACurrentMediaTime() + 5.f)];
    [imgView.layer addAnimation:anim forKey:@"myAwesomeAnim"];

两者都可以用来实现这一目标。但如果您对Core Animation了解不多,则应使用Core Graphics。用它来获得一些结果会更容易,因为你可以使用UIView动画。