gpt4 book ai didi

ios - 使 UIImageView 适合 UIImage

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:47 26 4
gpt4 key购买 nike

我有一个使用 AutoLayout 和约束设置的 UIImage View 。我使用

使图像适合 ImageView
     self.selectPhoto.contentMode = UIViewContentModeScaleAspectFit;
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.selectPhoto attribute:NSLayoutAttributeTop multiplier:1 constant:-10];
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:self.selectPhoto attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.caption attribute:NSLayoutAttributeTop multiplier:1 constant:-35];
[self.view addConstraint:topConstraint];
[self.view addConstraint:bottomConstraint];
self.selectPhoto.image= existingImage;

效果很好。因为 UIImageView 是使用 AutoLayout 设置的,而 UIImage 是使用 Aspect Fit 显示的,所以我不知道图像的确切框架。我希望图像的左上角在 ImageView 中位于 0,0,因为我有另一个较小的图像,用户可以在它上面移动。 Image 1

例如:由于瀑布图像的方向,左上角在 UIImageView 中为 0,23ish。当图像高度 > 图像宽度时,( ImageView 的)原点为 66,0。这是一个问题,因为我想绘制两个图像的用户上下文并另存为新图像。我不能这样做,因为我不知道 2 个月的图像在瀑布图像上的位置,因为我不知道瀑布图像的来源。我知道 2 个月的图像在 ImageView 中的位置,但图像并没有占据整个 ImageView 。由于 AutoLayout 和 Aspect Fit,它会根据图像的大小/方向而有所不同。我将 2Months Pan 手势添加到瀑布 ImageView 中,但起源不一致。附加到 2Months View 的平移手势代码如下

-(void) handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
self.itemToEdit.stickerLocation= recognizer.view.frame;
NSLog(@"The location of the sticker is %f and y is %f", recognizer.view.frame.origin.x, recognizer.view.frame.origin.y);
}

有没有办法让 UIImageView 适合实际显示的 UIImage?基本上我想做一些像 self.selectPhoto.frame = self.selectPhoto.image.frame我做不到。

总结:在使用 AutoLayout 和 Aspect fit 放置 imageView 后,我如何知道它的绝对原点?

最佳答案

基于 this Stack Overflow answer ,我们可以通过访问其 size 属性来获取 UIImage 的大小。

因此,从这里开始,最简单的方法是使用自动布局。

使用 ImageView 设置 Storyboard或 xib。继续,给你的 ImageView 一个明确的宽度和高度约束。现在,填写 ImageView 周围的其余约束。但是请记住,当我们将不同的图像放入 ImageView 时, ImageView 上的显式宽度/高度会发生变化,因此我们的其他自动布局约束必须牢记这一点。

现在,为我们的显式高度和宽度约束添加一个 IBOutlet。这可以像我们为任何其他 UI 元素添加 socket 一样完成。只需 Ctrl+ 从 IB 中的约束拖动到源文件。

现在我们有这样的东西:

@property (nonatomic, weak) NSLayoutConstraint *imageHeight;
@property (nonatomic, weak) NSLayoutConstraint *imageWidth;

现在,每次我们更改 ImageView 的图像时,我们都会更新这些约束的常量部分:

self.imageHeight.constant = newImage.size.height;
self.imageWidth.constant = newImage.size.width;

现在,使用上述方法意味着我们的 ImageView 将始终与我们的图像具有完全相同的大小。这可能意味着它延伸到屏幕边界之外或只填满屏幕的一小部分。

另一种方法是使用纵横比约束。再一次,首先给你的 ImageView 一个宽高比约束,将它的高度与它的宽度相关联。现在四处走走,为 View 设置其余的自动布局约束。也许您希望将左上角固定到特定位置。

在执行此操作时,您可能还想为 ImageView 的宽度和高度设置一些小于或等于约束。这些约束将确保无论图像的大小或形状如何, ImageView 都将小于您指定的大小(因此留在屏幕上)。

再次为您的纵横比约束添加一个导出。每次我们更改 ImageView 的图像时,我们都会修改它:

@property (nonatomic, weak) NSLayoutConstraint *imageRatio;

现在,我们将修改比率约束的 multiplier 属性,而不是 constant 属性(我们希望将其保留为零)。宽度是在顶部还是底部完全取决于约束的连接方式,因此可能需要反复试验。但它的要点是,我们想要这样的东西:

self.imageRatio.multiplier = newImage.size.height / newImage.size.width;

(同样,您可能需要在此处翻转高度/宽度。)

关于ios - 使 UIImageView 适合 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30867263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com