在选定区域将图像裁剪成圆形

时间:2014-01-28 07:57:59

标签: ios

我希望在iPhone中添加新联系人时实现“添加照片”等功能。在iPhone中点击“添加照片”(添加新的联系人时),它会从图像中选择一个圆形。如何在我的应用程序中实现此功能?

TIA

4 个答案:

答案 0 :(得分:0)

您可以使用UIImageView图层角半径。其他方法是覆盖drawRect:并在那里绘制自定义形状... drawRect:中未调用UIImageView

来自Apple的文档:

  

优化UIImageView类以将其图像绘制到显示器。 UIImageView不调用其子类的drawRect:方法。如果您的子类需要包含自定义绘图代码,则应该改为继承UIView类

有一次,我做了诀窍,简单地用UIImageView覆盖了内部裁剪圆圈的视图,这样印象就是图像有圆形。

- (void)drawRect:(CGRect)rect {
  CGContextRef context = UIGraphicsGetCurrentContext();

  [[UIColor whiteColor] set]; // The background is white
  UIRectFill(rect);

  // self.cropRect is your cropping area, depending on an imageView
  rect = CGRectInset(self.cropRect, 1, 1);

  // The key expression here, makes bezier path drawn in opposite direction
  CGContextSetBlendMode(context, kCGBlendModeDestinationOut);

  UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:rect.size.width * 0.5f];
  [path fill];

  // Back to normal settings.
  CGContextSetBlendMode(context, kCGBlendModeNormal);

  [[UIColor whiteColor] set];
  CGContextStrokeEllipseInRect(context, rect);
}

答案 1 :(得分:0)

圆角是最简单的方法。否则,有CAShapeLayer,您可以将其设置为要裁剪的视图图层的蒙版。

答案 2 :(得分:0)

我的猜测是你可能希望mask你的UIImageView对象。看一下本教程,其中CoreGraphics用于解决此问题。

快乐编码!!

答案 3 :(得分:0)

这是我做的圆形裁剪(圆形)轮廓图像:

我在IB中添加了一个UIImageView,并给它一个48x48的修复大小。我添加了一种方法来进行图像更新,这使得图像图标具有透明背景的圆形形状......

@property (nonatomic, weak) UIImageView* icon;

// ...

- (void)updateIconWithImageData:(NSData*)someImageData
{
    self.icon.image = [UIImage imageWithData:someImageData];
    self.icon.layer.cornerRadius = 24;
    self.icon.layer.masksToBounds = YES;
    self.icon.layer.shouldRasterize = YES;
}