2016-08-12 50 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。后者在这里效果更好。设置背景图像似乎不能很好地处理图像的比例,但我相信有一种方法可以更好地实现。在上面的情况下设置图像更容易。