2013-11-26 157 views
2

在iOS中,我試圖繪製一個剪輯圖像。我想剪裁是從一個邊緣彎曲到最遠的相對邊緣。下圖以紅色顯示最終圖像的邊框。在這個例子中,曲線從左下到右上。從邊緣的UIBezier路徑曲線

enter image description here

這是我目前寫的代碼。我唯一的問題是這種方法bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:不曲線到我需要的擴展。

- (UIImage *)roundCorneredImage:(UIImage *)image radius:(CGFloat)radius { 
    CGRect imageRect = CGRectZero; 
    imageRect.size = image.size; 

    UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, [UIScreen mainScreen].scale); 

    CGSize size = CGSizeMake(radius, radius); 
    [[UIBezierPath bezierPathWithRoundedRect:imageRect byRoundingCorners:UIRectCornerBottomRight cornerRadii:size] addClip]; 

    [image drawInRect:imageRect]; 

    UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return result; 
} 

UPDATE:

繼承人我得到的結果和我更新的代碼。我需要一些進一步的幫助......

enter image description here

UIBezierPath* bezier = [UIBezierPath bezierPath]; 
[bezier moveToPoint:CGPointMake(0, 0)]; 
[bezier addLineToPoint:CGPointMake(0, imageRect.size.height)]; 

[bezier addArcWithCenter:CGPointMake(imageRect.size.width/2, imageRect.size.height/2) 
        radius:imageRect.size.height/2 
       startAngle:M_PI/2 
       endAngle:0 
       clockwise:NO]; 

[bezier addLineToPoint:CGPointMake(0, 0)]; 
    [bezier addClip]; 

回答

1

繼承人我的解決方案爲任何人誰想要看到一些示例代碼。

- (UIImage *)roundCorneredImage:(UIImage *)image radius:(CGFloat)radius { 
    CGRect imageRect = CGRectZero; 
    imageRect.size = image.size; 

    UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, [UIScreen mainScreen].scale); 

    UIBezierPath* bezier = [UIBezierPath bezierPath]; 
    [bezier moveToPoint:CGPointMake(imageRect.size.width, 0)]; 
    [bezier addLineToPoint:CGPointMake(0, 0)]; 
    [bezier addLineToPoint:CGPointMake(0, imageRect.size.height)]; 
    [bezier addArcWithCenter:CGPointMake(0, 0) radius:imageRect.size.height startAngle:M_PI/2 endAngle:0 clockwise:NO]; 
    [bezier addClip]; 

    [image drawInRect:imageRect]; 

    UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return result; 
} 
1

添加直線與addLineToPoint和曲線與addArcWithCenter:radius:startAngle:endAngle:clockwise:讓你有在曲線的形狀控制。

+0

我是新來的這個iOS領域,並沒有完全理解所有的參數是什麼。你可以用示例代碼更新你的答案,這樣我就可以開始工作,然後我可以從那裏調整它。謝謝 – cnotethegr8

+1

@ cnotethegr8這可能是一個很好的機會來看看[文檔](https://developer.apple.com/library/ios/documentation/uikit/reference/UIBezierPath_class/Reference/Reference.html#//apple_ref/ occ/instm/UIBezierPath/addArcWithCenter:radius:startAngle:endAngle:順時針:) –

+0

@DavidRönnqvist該文檔不會幫助我。它是我現在需要的細節。我不知道如何完成曲線。我會用我更新的代碼更新我的問題。 – cnotethegr8