2017-04-23 108 views
1

我想添加半徑到UIView的左下角和右下角,然後只在同一個UIView的底部投影。 我已經通過解決方案,其中所有的角落都提供半徑,然後影子。這工作正常。但是當我使用UIBeizerPath向底角添加半徑時,shadow屬性似乎不起作用。 我正在使用Objective-C和XCode 8.1。 我該怎麼辦?底角圓角半徑和陰影只在目標C中UIView底部

使用下面的代碼底角獲取它們的半徑,但陰影屬性不起作用。

UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 40)]; 

[testView setBackgroundColor:[UIColor yellowColor]]; 

// shadow 
testView.layer.shadowColor = [UIColor colorWithRed:156.0f/255.0f green:153.0f/255.0f blue:153.0f/255.0f alpha:1.0f].CGColor; 
testView.layer.shadowOffset = CGSizeMake(0.0f, 2.0f); 
testView.layer.shadowRadius = 4.0f; 
testView.layer.shadowOpacity = 0.5f; 

UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:CGPointMake(0.0, 0.0)]; 
[path addLineToPoint:CGPointMake(0.0, CGRectGetHeight(testView.frame))]; 
[path addLineToPoint:CGPointMake(CGRectGetWidth(testView.frame), CGRectGetHeight(testView.frame))]; 
[path addLineToPoint:CGPointMake(CGRectGetWidth(testView.frame), 0.0)]; 
testView.layer.shadowPath = path.CGPath; 

//bottom corners radius 
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:testView.bounds   
               byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight)   
                cornerRadii:CGSizeMake(2.0, 2.0)]; 
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; 
maskLayer.frame = self.view.bounds; 
maskLayer.path = maskPath.CGPath; 
testView.layer.mask = maskLayer; 
+0

添加相關的代碼和截圖與當前的結果。 –

回答

0

面具掩蓋了陰影。你需要在另一個視圖中有兩個視圖。將蒙版應用於內部視圖並將陰影應用於外部視圖。

+0

可以使用多個圖層而不是多個視圖來完成嗎? – coderex

+0

我從來沒有這樣實現過,但它可能會工作。 –

+0

如果我將角半徑蒙版應用於內部視圖,它將其cliptobounds設置爲true,並且outerview的陰影不顯示! – coderex