我怎样才能绘制一个阴影旋转UIView,但没有阴影被旋转以及

我想旋转后正确应用阴影。 这是我的代码:

myButton.transform = CGAffineTransformMakeRotation(M_PI / 180.0 * 90.0); myButton.layer.shadowOffset = CGSizeMake(12.0, 12.0); myButton.layer.shadowRadius = 2.0; myButton.layer.shadowOpacity = 0.8; myButton.layer.shadowColor = [UIColor blackColor].CGColor; 

没有旋转的阴影看起来很好:

在这里输入图像说明

但是在旋转90°之后,阴影也会旋转:

在这里输入图像说明

有没有什么我可以做的,而不覆盖drawRect方法,做低级绘图? 或者,也许有一种方法,纠正shadowOffset给定的旋转angular度? 手动校正90°偏移很容易,所以这是不行的;)

它应该是这样的:

在这里输入图像说明

提前致谢!

在Bartosz Ciechanowski的帮助下,这个作品现在!

 float angleInRadians = M_PI / 180.0 * -35.0; myButton.transform = CGAffineTransformMakeRotation(angleInRadians); myButton.layer.shadowOffset = [self correctedShadowOffsetForRotatedViewWithAngle:(angleInRadians) andInitialShadowOffset:CGSizeMake(12.0, 12.0)]; myButton.layer.shadowRadius = 2.0; myButton.layer.shadowOpacity = 0.8; myButton.layer.shadowColor = [UIColor blackColor].CGColor; 

这导致:

在这里输入图像说明

代替

在这里输入图像说明

假设一个anAngle是弧度:

 - (CGSize)correctedShadowOffsetForRotatedViewWithAngle:(CGFloat)anAngle andInitialShadowOffset:(CGSize)anOffset { CGFloat x = anOffset.height*sinf(anAngle) + anOffset.width*cosf(anAngle); CGFloat y = anOffset.height*cosf(anAngle) - anOffset.width*sinf(anAngle); return CGSizeMake(x, y); } 

我想你可以尝试使用

 myButton.layer.shadowOffset = CGSizeMake(-12.0, -12.0); 

 myButton.layer.shadowOffset = CGSizeMake(12.0, 12.0); 

只要尝试使用这个,如果它的工作。要么你需要设置阴影与试验和错误的方法。 这只是一个build议或窍门,如果可以解决您的问题。