我想通过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动画旋转。
答案 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度