繁体   English   中英

如何将UIView旋转45度?

[英]How to rotate UIView by 45 degrees?

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

- (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) 我看到这篇文章和其他几个,但我不明白,如何通过M_PI/2实现UIButton动画旋转。

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

警告:如果transform属性不是identity变换,则此属性的值未定义,因此应忽略。

所以只要结果看起来没问题,这就是预期的行为。

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

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 ) );
}

Xcode - 10
斯威夫特 - 4倍

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM