如何将UIView旋转45度?

时间:2014-03-19 16:27:26

标签: ios objective-c uiview uiviewanimation

我想通过UIButton动画我的M_PI/4。这是我的代码:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [UIView animateWithDuration:.5 animations:^{
        self.closeButton.transform = CGAffineTransformMakeRotation(M_PI/4);
    }];
}

但这会让我的按钮框架损坏。动画前的帧为(260 0; 44 44),动画后的帧为(250.887 -9.1127; 62.2254 62.2254)。 我看到this帖子和其他几个人,但我不明白,如何通过M_PI/2实现UIButton动画旋转。

3 个答案:

答案 0 :(得分:3)

应用转换后,frame property无效。根据文件:

  

警告:如果转换属性不是标识转换,则此属性的值未定义,因此应忽略。

只要结果看起来就好了,这就是预期的行为。

如果要移动按钮,则需要保存转换,将其重置为CGAffineTransformIdentity,设置新帧,然后重新应用旧转换。或者,即使应用了转换,您也可以访问和修改框架的center属性。

答案 1 :(得分:3)

UIView的frame是完全包围视图的最小矩形。当您按PI / 2旋转时,框架将按sqrt(2)展开,并且将调整原点以使中心保持在同一点,这正是发生的情况。

如果你想让按钮旋转并保持相同的框架,你需要在旋转时压缩按钮,就像这样

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    CGFloat w = self.closeButton.bounds.size.width  / sqrtf( 2.0f );
    CGFloat h = self.closeButton.bounds.size.height / sqrtf( 2.0f );
    NSLog( @"%@ w=%f", NSStringFromCGRect( self.closeButton.bounds ), w );

    [UIView animateWithDuration:.5 animations:^{
        self.closeButton.transform = CGAffineTransformMakeRotation(M_PI/4);
        self.closeButton.bounds = CGRectMake( 0, 0, w, h );
    }];

    NSLog( @"%@", NSStringFromCGRect( self.closeButton.frame ) );
}

答案 2 :(得分:1)

Xcode-10
迅捷-4倍

self.yourView.transform = CGAffineTransform(rotationAngle: .pi/4)

这可以帮助您将uiview旋转到45度