如何使图像可调整大小的裁剪框

时间:2013-06-16 17:31:58

标签: ios objective-c cocoa-touch

我正在尝试找到一种方法在用户上传的图片之上创建一个框,以便用户可以裁剪图片以适应X裁剪宽高比(该框将具有X min宽度和高度以及定义的宽高比的方框)。

我能够找到与裁剪框一起玩的回购,但没有具有宽高比功能的回购。因此我想知道是否有人可以指点我的教程,这样我就可以学习如何做到这一点,或者做一个能做我想做的回购,以便我能看到另一个人是如何实现的。

3 个答案:

答案 0 :(得分:1)

这里有几个挑战,一个是呈现和拖动裁剪控件的UI,更简单的是限制裁剪控件的数学。这是对后者的暗示:

@interface CropBox : NSObject

@property (assign, nonatomic) CGRect box;
@property (assign, nonatomic)  CGFloat aspect;  // set this to 16.0/9.0=1.77 e.g. to get 16:9

- (void)setOrigin:(CGPoint)origin;
- (void)setWidth:(CGFloat)width;
- (void)setHeight:(CGFloat)height;

@end

@implementation CropBox

- (void)setOrigin:(CGPoint)origin {

    self.box = CGRectMake(origin.x, origin.y, self.box.width, self.box.height);
}

- (void)setWidth:(CGFloat)width {

    CGFloat height = width / self.aspect;
    self.box = CGRectMake(self.box.origin.x, self.box.origin.y, width, height);
}

- (void)setHeight:(CGFloat)height {

    CGFloat width = height * self.aspect;
    self.box = CGRectMake(self.box.origin.x, self.box.origin.y, width, height);
}

@end

答案 1 :(得分:0)

我无法公开分享我的确切代码。但这就是它的粗略表现。在我的情况下,我想允许调整UIImageView的大小。在你的情况下,这可能是一个简单的矩形。如果是这样,那么handlePinch:函数中的逻辑就会相应地改变。
初始化捏合手势识别器并将其添加到目标视图。

UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
[imageview addGedtureRecognizer:pinchGesture];

实际的手势处理程序代码。对于手势处理程序代码,我引用了this页面。

- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer 
{    
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;    
}

如果CGRect调整大小,您应该在this页面上查看CGRectApplyAffineTransform方法。 CGAffineTransformScale中的第二个和第三个参数分别是X和Y方向的缩放因子。保持纵横比与初始值相同的关键是使这两个值相同。
希望这有帮助。如果我没有说清楚的话,请发表评论。

答案 2 :(得分:0)

我创建了一个自定义UIPinchGestureRecognizer,可以在单向或两者上进行缩放。这可用于执行覆盖裁剪视图的自定义比例。您可以调整一些设置以帮助您的项目。看看; https://stackoverflow.com/a/17938469/1186235