【问题标题】:iPhone - How do you make a resizable rectangle for cropping images?iPhone - 如何制作可调整大小的矩形来裁剪图像?
【发布时间】:2010-12-30 14:27:52
【问题描述】:

我无法制作可调整大小的矩形来裁剪图像。我正在尝试实现类似这张图片的效果:

http://img192.imageshack.us/img192/8930/customcropbox.jpg

嗯,唯一的问题是我不知道从哪里开始。我需要一些关于如何实现这种裁剪效果的建议。我应该阅读哪些文件?核心图形还是 Quartz 2d?两个都?自 iPhone 发布之日起,我一直在为 iPhone 编写代码,但我从未真正使用过核心图形等。任何帮助或建议将不胜感激。随着我的进展,我将把我的代码放在这里,以展示当我实现它时它是如何完成的。 :-) 此外,这个矩形框在 UIImageView 中可以在屏幕上移动,这使它更有趣。感谢您的帮助,我期待实现这一目标。

【问题讨论】:

标签: iphone iphone-sdk-3.0 crop iphone-sdk-3.1


【解决方案1】:

书签我的question 完全相同。

我已经在我的裁剪视图中移动并让它正确显示图像的一部分,但是处理滚动视图缩放是一项正在进行的工作。目前我在 UIScrollview 中有一个 imageview 和普通 UIView 分层,然后在滚动视图之外并且在更高级别是我的自定义裁剪 UIView。我实现了 touches 方法来处理拖动它,还实现了 drawRect:

- (void)drawRect:(CGRect)rect {
    // Drawing code
    if( self.image == nil )
        return;

    CGPoint offset = scrollView.contentOffset;
    clipRect = CGRectOffset(self.frame, offset.x, offset.y);

    UIImage *croppedImage = [image croppedImage:clipRect];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [croppedImage drawAtPoint:CGPointMake(0, 0)];
}

注意:我的裁剪视图不是 UIImageView 的后代,它只是 UIView 并引用了另一个视图的底层图像。

“croppedImage”是 UIImage 上的一个类别,非常简单:

@implementation UIImage (Resize)
- (UIImage *)croppedImage:(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return croppedImage;
}
...
@end

我已经实现了一些 UIScrollViewDelegate 方法并通过滚动活动来保持我的裁剪视图同步。也可以进行缩放,但如前所述,尚未按预期工作。

另一个注意事项:我认为没有必要每次都浪费时间生成带有裁剪区域的新 UIImage,因为

CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds);
and 
CGContextDrawImage(ctx, clipRect, imageRef);

【讨论】:

    【解决方案2】:

    Quartz 是 Core Graphics 的“营销术语”,您应该从这里开始。您需要使用 UIView(在 -drawRect: 中完全自定义绘图),捕获并跟踪其触摸,然后绘制结果。您可以使用 UIGraphicsGetCurrentContext() 获取当前的图形上下文。这应该足以让你开始!

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 2012-07-05
      • 2012-07-09
      • 1970-01-01
      • 2020-09-15
      • 2011-11-11
      • 1970-01-01
      • 2012-02-11
      • 2013-03-01
      相关资源
      最近更新 更多