我的問題是:我試圖切出自定義UIView段並將陰影效果應用於此視圖。UIView與切出段和陰影
在自定義UIView類,我這樣做:
創建兩層 - 陰影和麪具。添加一個陰影圖層作爲此自定義視圖的子圖層。然後,我創建了一個新視圖,將其蒙版設置爲蒙版圖層,並將其作爲子視圖添加到自定義視圖中。
self.backgroundColor = [UIColor clearColor];
CGFloat radius = 40;
float startAngle = -M_PI;
float endAngle = 0;
UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds];
[path moveToPoint:CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMaxY(self.bounds)+radius/1.8)];
[path addArcWithCenter:CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMaxY(self.bounds)+radius/1.8) radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
CAShapeLayer *shadowLayer = [[CAShapeLayer alloc] init];
shadowLayer.frame = self.bounds;
shadowLayer.path = path.CGPath;
shadowLayer.shadowColor = [UIColor grayColor].CGColor;
shadowLayer.shadowOpacity = 0.5;
shadowLayer.shadowRadius = 2;
shadowLayer.masksToBounds = NO;
shadowLayer.shadowOffset = CGSizeMake(2.0, 2.0);
shadowLayer.fillRule = kCAFillRuleEvenOdd;
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;
maskLayer.masksToBounds = NO;
maskLayer.path = path.CGPath;
maskLayer.fillRule = kCAFillRuleEvenOdd;
maskLayer.fillColor = [UIColor whiteColor].CGColor;
[self.layer addSublayer:shadowLayer];
UIView *view = [[UIView alloc] initWithFrame:self.bounds];
view.backgroundColor = [UIColor whiteColor];
view.layer.mask = maskLayer;
[self addSubview:view];
這就是我想達到什麼 -
,這是我真正得到
如果我設置clipToBounds = YES,將削減關閉所需的陰影效果。
如果我想切割半圓,絕對沒有問題。因爲在這種情況下,半圓形路徑完全位於視圖邊界內。
但我確實需要實現第一個圖像顯示的結果。 我正在考慮逐行建立路徑,但當涉及到這個弧時會出現問題,並且結果可能不會那麼準確。
有沒有人有想法如何可以做? 謝謝!
這就是我實際做的。我創建了兩層 - 陰影和遮罩層。我將陰影圖層添加爲自定義視圖的子圖層。我創建了一個新視圖並將其設置爲遮罩層。它會產生這種奇怪的效果。 – Syngmaster
查看編輯答案。 –
謝謝! PaintCode是一個了不起的工具!它完成了它的工作,現在一切都運行得很完美!唯一的問題是需要調整所有曲線點以在不同的設備尺寸上產生相同的效果。我應該能夠管理:) – Syngmaster