ios怎麼讓圖片只有上半邊圓角?

就醬,開發一直搞不定網上也搜不到╮(╯▽╰)╭

難道真的不能像css一樣隨意設置四個角弧度的嗎


四個角都圓角不用說,直接設置cornerRadius和maskToBounds

如果只是上面兩個角圓角的話,那就畫

CGContextRef context = UIGraphicsGetCurrentContext();

UIImage *your_image = [UIImage imageNamed: @"your_image_name"];

UIBezierPath *rectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(100, 100, 100, 100) byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii: CGSizeMake(5, 5)];
[rectanglePath closePath];
CGContextSaveGState(context);
[rectanglePath addClip];

[your_image drawInRect: CGRectMake(100, 100, your_image.size.width, your_image.size.height)];
CGContextRestoreGState(context);

你覺得不爽,你可以自己封裝嘛

當然也可以如樓上所說,用一些取巧的辦法。


可以使用UIBezierPath的

+ (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect
byRoundingCorners:(UIRectCorner)corners
cornerRadii:(CGSize)cornerRadii

參數corners指定了想要需要成為圓角的角。可選值為:

enum {
UIRectCornerTopLeft = 1 &<&< 0, UIRectCornerTopRight = 1 &<&< 1, UIRectCornerBottomLeft = 1 &<&< 2, UIRectCornerBottomRight = 1 &<&< 3, UIRectCornerAllCorners = ~0 }; typedef NSUInteger UIRectCorner;

從名字就能看出來其代表的意義。

例子:

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(120, 10, 80, 80)];
view2.backgroundColor = [UIColor redColor];
[self.view addSubview:view2];

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view2.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = view2.bounds;
maskLayer.path = maskPath.CGPath;
view2.layer.mask = maskLayer;

如果需要將UIView的4個角全部都為圓角,做法相當簡單,只需設置其Layer的cornerRadius屬性即可。


兩種方法,

1,首先,稍微專業點的,畫路徑,然後設置層

2,障眼法,將你要倒圓角的view,四個角全部倒,然後用一個更大的透明的view包含它,上左右內邊距不小於0,但是下邊距小於0,且距離的絕對值大於倒角半徑,然後設置clipstobounds,或者masktobounds為yes


利用貝塞爾曲線和CAShapeLayer結合就可以實現;

//貝塞爾曲線設置

+ (UIBezierPath *)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;

UIRectCorner:

typedef NS_OPTIONS(NSUInteger, UIRectCorner) {

UIRectCornerTopLeft = 1 &<&< 0,

UIRectCornerTopRight = 1 &<&< 1,

UIRectCornerBottomLeft = 1 &<&< 2,

UIRectCornerBottomRight = 1 &<&< 3,

UIRectCornerAllCorners = ~0UL

};

選擇其中的UIRectCornerTopLeft |UIRectCornerTopRight 就ok啦~


你們的開發不用stackoverflow的么。。趕緊辭了吧。。


Swift下 報錯了...


推薦閱讀:

能簡單地用「扁平化」來描述 iOS 7 在設計風格上的變化嗎?
安裝 iOS 7 的設備,具備 iCloud 網路鎖,失竊之後會被怎麼處理?
認為 iOS 7 是錯誤設計方向的理由是什麼?
iOS 7 的 Alert Views 按鈕(確認和取消)布局改變了嗎?

TAG:iOS | iOS開發 | 計算機科學 | Objective-C | iOS7 |