我正在尝试找到一种方法在用户上传的图片之上创建一个框,以便用户可以裁剪图片以适合 X 裁剪纵横比(该框将具有 X 最小宽度和高度并定义框的纵横比)。
我能够找到使用裁剪框但没有具有纵横比功能的存储库。因此,我想知道是否有人可以向我指出一个教程,这样我就可以学习如何做到这一点,或者一个可以实现我想要实现的回购,这样我就可以看到另一个人是如何实现这一目标的。
我正在尝试找到一种方法在用户上传的图片之上创建一个框,以便用户可以裁剪图片以适合 X 裁剪纵横比(该框将具有 X 最小宽度和高度并定义框的纵横比)。
我能够找到使用裁剪框但没有具有纵横比功能的存储库。因此,我想知道是否有人可以向我指出一个教程,这样我就可以学习如何做到这一点,或者一个可以实现我想要实现的回购,这样我就可以看到另一个人是如何实现这一目标的。
这里有几个挑战,一个是呈现和拖动裁剪控件的 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
我不能公开分享我的确切代码。但这就是它的大致情况。在我的情况下,我想允许调整 UIImageView 的大小。在您的情况下,这可能是一个简单的矩形。如果是这样,只是handlePinch:
函数中的逻辑会相应改变。
初始化捏手势识别器并将其添加到目标视图。
UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
[imageview addGedtureRecognizer:pinchGesture];
实际的手势处理程序代码。对于手势处理程序代码,我参考了此页面。
- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer
{
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;
}
在CGRect
调整大小的情况下,您应该查看此页面上的CGRectApplyAffineTransform
方法。CGAffineTransformScale 中的第二个和第三个参数分别是 X 和 Y 方向的缩放因子。保持纵横比与初始值相同的关键是使这两个值相同。希望这可以帮助。如果我没有说清楚,请发表评论。
我创建了一个自定义的 UIPinchGestureRecognizer,它可以单向或双向缩放。这可用于对覆盖的裁剪视图进行自定义缩放。您可以调整一些设置以帮助您的项目。检查出来; https://stackoverflow.com/a/17938469/1186235