簡體   English   中英

如何繪制帶有陰影但沒有陰影旋轉的旋轉UIView

[英]How can I draw a rotated UIView with a shadow but without the shadow being rotated as well

我想在旋轉后正確應用陰影。 這是我的代碼:

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;

這導致:

在此輸入圖像描述

代替

在此輸入圖像描述

假設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);

只要嘗試使用它,如果它工作。你需要使用Trial&Error方法設置陰影。 如果可以解決您的問題,這只是一個建議或技巧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM