【发布时间】:2011-08-12 06:49:45
【问题描述】:
我希望在旋转后正确应用阴影。这是我的代码:
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?手动校正 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;
这会导致:
而不是
【问题讨论】:
-
我不知道手动校正偏移量是否适合您。您可以使用 sin/cos 手动计算偏移量,也可以只应用按钮的逆变换
-
@Gobara,手动校正是绝对可以接受的,但它必须是一种可重用的解决方案,而不仅仅是我的代码示例。带有此标头的方法会很酷:
- (CGSize)correctedShadowOffsetForRotatedViewWithAngle:(float)anAngle andInitialShadowOffset:(CGSize)anOffset -
您是否尝试过使用
UIView的convert...方法?看起来您必须将CGSize放在一个矩形中,因为 UIView 没有直接转换大小的方法。 -
@Richard,我不知道怎么做。如果您有示例,我将不胜感激。
-
旋转前去掉阴影再应用?
标签: iphone objective-c ios uiview shadow