2016-08-12 92 views
0

嘗試獲得基於另一個的UIImageView一個圓形的UIImage:如何調整UIImageView邊界以剪裁圓角UIImage?

1)的UIImageView被稱爲:

@interface CompetitorAnalysisViewController() 
@property (weak, nonatomic) IBOutlet UIImageView *submitImageButton; 
@end 

2)回合的UIImage:

UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 
// Round the image 
UIImage *roundedChosenImage = [self getRoundedRectImageFromImage:chosenImage onReferenceView:_submitImageButton withCornerRadius: _submitImageButton.frame.size.width/2]; 

3)如何圓UIImage:

- (UIImage *)getRoundedRectImageFromImage :(UIImage *)image onReferenceView :(UIImageView*)imageView withCornerRadius :(float)cornerRadius 
{ 
    UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 0); 
    [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds 
          cornerRadius:cornerRadius] addClip]; 
    [image drawInRect:imageView.bounds]; 
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return finalImage; 
} 

問題:

我想剪裁UIImage(不是UIImageView)是一個四捨五入的。然而,我現在得到的圓形UIImage比我想要的要大。

我應該以某種方式調整「imageView.bounds」嗎?如果我可以按比例調整它,這將是非常好的。

或者其他更好的方法來實現呢?

+0

我認爲你在正確的軌道 - 只是改變'imageView.bounds'的大小,然後當你'drawInRect'時,它會是你想要的大小。 – brandonscript

+0

@brandonscript我是新來的Objective-C,並在網上搜索,但沒有找到如何真正改變imageView.bounds的大小...任何建議? –

+0

'imageView.bounds = CGRectMake(X,Y,L,W)'應該這樣做 – brandonscript

回答

0

感謝@brandonscript,我終於想出了一個辦法來做到這一點。

UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 

// Create a reference ImageView 
UIImageView *referenceImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 135, 135)]; 
// Round the image 
UIImage *roundedChosenImage = [self getRoundedRectImageFromImage:chosenImage onReferenceView:referenceImageView withCornerRadius: referenceImageView.frame.size.width/2]; 

[choosePhotoButton setImage:roundedChosenImage forState:UIControlStateNormal]; 
[picker dismissViewControllerAnimated:YES completion:NULL]; 

一個非常棘手的部分是是「設置背景圖像」還是隻是「設置圖像」的UIButton。後者在這裏效果更好。設置背景圖像似乎不能很好地處理圖像的比例,但我相信有一種方法可以更好地實現。在上面的情況下設置圖像更容易。