在 iOS 中使用 PEPhotoCropEditor 库的恒定裁剪纵横比

Posted

技术标签:

【中文标题】在 iOS 中使用 PEPhotoCropEditor 库的恒定裁剪纵横比【英文标题】:Constant crop aspect ratio using PEPhotoCropEditor library in iOS 【发布时间】:2015-04-01 11:53:20 【问题描述】:

我在我的一个 ios 项目中使用 PEPhotoCropEditor 库。我可以使用以下代码获得恒定的纵横比 (1:1)。

- (void)openEditor 

    PECropViewController *controller = [[PECropViewController alloc] init];
    controller.delegate = self;
    controller.image = self.imageView.image;

    UIImage *image = self.imageView.image;   
    CGFloat width = image.size.width;
    CGFloat height = image.size.height;
    CGFloat length = MIN(width, height);

    CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
    controller.imageCropRect = CGRectMake((width - length) / 2,
                                          (height - length) / 2,
                                          length,
                                          length);


//     Restricted to a square aspect ratio
    controller.keepingCropAspectRatio = YES;
    controller.cropAspectRatio = 1.0;

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
    [self presentViewController:navigationController animated:YES completion:NULL];

但是我需要具有 (1:3) 的纵横比(高度:宽度)而不是 (1:1)。

controller.cropAspectRatio = 1.0f / 3.0f;

我在上面尝试过,但没有任何反应。仍然具有相同的纵横比。然后我也改变了下面的代码。

controller.imageCropRect = CGRectMake((width - length) / 2,
                                      (height - length) / 2,
                                      length * 3,
                                      length);

再次没有发生任何事情。在上面评论之后,我硬编码了下面的值。

controller.imageCropRect = CGRectMake(0.0f, 0.0f, 300.0f, 100.0f);

然后裁剪区域显示正确,但是在调整 aria 大小时会导致破坏裁剪纵横比 (1:3)

知道如何在所有编辑过程完成之前保持纵横比 (1:3) 吗?

【问题讨论】:

你得到答案了吗?我有同样的问题。 【参考方案1】:

在 PECropViewController.m 的 ViewdidAppear 中设置此项

 self.cropAspectRatio = 1.0f;

 self.keepingCropAspectRatio = YES;

并将值传递给 PECropRectView.m 中的函数 setKeepingAspectRatio

- (void)setKeepingAspectRatio:(BOOL)keepingAspectRatio

   _keepingAspectRatio = keepingAspectRatio;

  if (self.keepingAspectRatio) 
     CGFloat width = CGRectGetWidth(self.bounds);
     CGFloat height = CGRectGetHeight(self.bounds);
     self.fixedAspectRatio = your_fixed_aspect_ratio_value;//fminf(width / height, height / width);
   

你会得到预期的结果。

【讨论】:

以上是关于在 iOS 中使用 PEPhotoCropEditor 库的恒定裁剪纵横比的主要内容,如果未能解决你的问题,请参考以下文章

在 React Native 应用程序中使用 Branch.io 在 iOS 中延迟深度链接

在支持 iOS 13.0 的同时在 iOS 14.0 中使用 @StateObject

可以在iOS中使用RFCOMM吗?

如何在 iOS 6 中使用 NSLayoutConstraint?

在 ios 中静音 MPMoviePlayerController 或在 ios 中使用带有静音选项的 AVPlayer 播放视频

我应该如何在 iOS 7 中使用具有 iOS 6 风格的 UIButtons?