我怎样才能绘制一个阴影旋转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议或窍门,如果可以解决您的问题。