Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何制作可调整图像大小的裁剪框_Ios_Objective C_Cocoa Touch - Fatal编程技术网

Ios 如何制作可调整图像大小的裁剪框

Ios 如何制作可调整图像大小的裁剪框,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我试图找到一种方法,在用户上传的图片上创建一个框,以便用户可以裁剪图片以适应X裁剪纵横比(框的宽度和高度为X min,并且定义了框的纵横比) 我能够找到使用裁剪框的回购协议,但没有一个具有纵横比功能。因此,我想知道是否有人能给我提供一个教程,让我学习如何做这件事,或是一个回购协议,让我了解另一个人是如何做到这一点的。这里有两个挑战,一个是展示和拖动裁剪控件的UI,更简单的是约束裁剪控制的数学。以下是关于后者的提示: @interface CropBox : NSObject @property

我试图找到一种方法,在用户上传的图片上创建一个框,以便用户可以裁剪图片以适应X裁剪纵横比(框的宽度和高度为X min,并且定义了框的纵横比)


我能够找到使用裁剪框的回购协议,但没有一个具有纵横比功能。因此,我想知道是否有人能给我提供一个教程,让我学习如何做这件事,或是一个回购协议,让我了解另一个人是如何做到这一点的。

这里有两个挑战,一个是展示和拖动裁剪控件的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

这里有两个挑战,一个是显示和拖动裁剪控件的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

我不能公开分享我的代码。但事情大致是这样的。在我的例子中,我想允许使用pinch调整UIImageView的大小。在您的例子中,这可能是一个简单的矩形。如果是这样,则只有
handlePinch:
函数中的逻辑会相应地改变
初始化夹点手势识别器并将其添加到目标视图

UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
[imageview addGedtureRecognizer:pinchGesture];
实际手势处理程序代码。对于手势处理程序代码,我已经参考了第页


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

我不能公开分享我的确切代码。但事情大致是这样的。在我的例子中,我想允许使用pinch调整UIImageView的大小。在您的例子中,这可能是一个简单的矩形。如果是这样,则只有
handlePinch:
函数中的逻辑会相应地改变
初始化夹点手势识别器并将其添加到目标视图

UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
[imageview addGedtureRecognizer:pinchGesture];
实际手势处理程序代码。对于手势处理程序代码,我已经参考了第页


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

我创建了一个自定义UIPinchGestureRecognitor,可以在单个方向或两个方向进行缩放。这可用于对重叠裁剪视图进行自定义缩放。您可以调整一些设置以帮助您的项目。请点击查看

我创建了一个自定义UIPinchGestureRecognitor,可以在单个方向或两个方向进行缩放。这可用于对重叠裁剪视图进行自定义缩放。您可以调整一些设置以帮助您的项目。请点击查看

如果我理解正确,您想做的是让用户裁剪图像,但是要使用您想要的纵横比,并且您最初为裁剪框提供特定的纵横比。如果是这样的话,为什么不将裁剪框的大小调整限制为在X和Y方向上仅按相同比例调整大小,从而保持初始纵横比?我希望我在这里已经讲清楚了。是的,这就是我想做的。但是我不知道怎么做。你怎么让用户调整cropbox的大小?我最近也做了类似的事情,我使用了
uipinchgestrerecognizer
让用户调整大小。如果您正在执行相同的操作,可以在此处查看
uipinchgestrerecognizer
部分。我们的想法是在
CGAffineTransform
@zambrey中将X和Y比例设置为相同的值。您可以分享您使用pinch调整大小的代码吗?拜托,约翰·内森,你解决了吗?如果我理解正确,我找不到任何东西。你想做的是让用户裁剪图像,但要使用你想要的纵横比,并且你最初为裁剪框提供特定的纵横比。如果是这样的话,为什么不将裁剪框的大小调整限制为在X和Y方向上仅按相同比例调整大小,从而保持初始纵横比?我希望我在这里已经讲清楚了。是的,这就是我想做的。但是我不知道怎么做。你怎么让用户调整cropbox的大小?我最近也做了类似的事情,我使用了
uipinchgestrerecognizer
让用户调整大小。如果您正在执行相同的操作,可以在此处查看
uipinchgestrerecognizer
部分。我们的想法是在
CGAffineTransform
@zambrey中将X和Y比例设置为相同的值。您可以分享您使用pinch调整大小的代码吗?拜托,约翰·内森,你解决了吗?我什么也找不到啊