将 UIImageView 适配到 UIImage

2024-01-05

我有一个使用自动布局和约束设置的 UIImage 视图。我使用将图像适合图像视图

     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;

It works great. Because the UIImageView is set up using AutoLayout, and the UIImage is shown using Aspect Fit, I do not know the exact frame of the image. I want the upper left hand corner of the image to be at 0,0 in the image view because I have another smaller image which the user can move around on top of it. Image 1

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

-(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 后,如何知道它的绝对原点?


基于这个堆栈溢出答案 https://stackoverflow.com/a/5249707/2792531,我们可以得到 a 的大小UIImage通过访问其size财产。

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

设置故事板或 xib,并在其上显示图像视图。继续为您的图像视图提供明确的宽度和高度约束。现在,填写图像视图周围的其余约束。但是请记住,当我们将不同的图像放入图像视图中时,图像视图上的显式宽度/高度将会发生变化,因此我们的其他自动布局约束必须牢记这一点。

Now, add an IBOutlet for our explicit height and width constraints. This can be done the same way we add an outlet for any other UI element. Just Ctrl+drag from the constraint in IB to the source file.

现在我们有这样的东西:

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

现在,每次我们更改图像视图的图像时,我们都会更新constant这些限制的一部分:

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

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

另一种方法是使用纵横比约束。再次,首先为图像视图提供宽高比约束,将其高度与其宽度相关联。现在,为视图设置其余的自动布局约束。也许您希望将左上角固定到特定位置。

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

再次为您的宽高比约束添加一个出口。每次更改图像视图的图像时,我们都会修改它:

@property (nonatomic, weak) NSLayoutConstraint *imageRatio;

现在,代替constant属性(我们希望将其保留为零),我们将修改multiplier比率约束的性质。宽度是在顶部还是底部完全取决于约束的连接方式,因此可能需要一些尝试和错误。但要点是,我们想要这样的东西:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 UIImageView 适配到 UIImage 的相关文章

  • 当我打开特定的 XIB 文件时,Xcode 崩溃

    I had a XIB文件一直运行良好 直到今天 当我尝试在 Xcode 中打开它时 沙滩球出现 1 分钟后 Xcode 崩溃 其他的XIBs工作得很好 另外 如果我只是在我的设备上构建并运行项目 它也可以工作 并且 XIB 在应用程序中工
  • 如何在 iOS 上的视图之间进行展开/收缩转换?

    我正在尝试在 iOS 中制作过渡动画 其中视图或视图控制器似乎扩展以填充整个屏幕 然后在完成后收缩回原来的位置 我不确定这种类型的转换的正式名称是什么 但您可以在 iPad 版 YouTube 应用中查看示例 当您点击网格上的搜索结果缩略图
  • 将 Javascript 变量传递给 Objective-C

    我已经了解了如何将 Objective C 变量传递给 JavaScript 在ios中将目标c变量传递给javascript https stackoverflow com questions 3641968 passing object
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 更新到 Xcode 7.0.1,项目现在有问题

    因此 我将 Xcode 6 1 版本上传到 iTunes Connect 并且该应用程序获得了批准 现在我正在尝试更新应用程序 我更新到 Xcode 7 0 1 Xcode 给我带来了问题 指出 对于应用程序 我使用了故事板和 Object
  • 解析后 UITableView 委托和数据源在单独的类中

    我需要从一个单独的类设置 UITableView 委托和数据源 方法调用解析后数据准备就绪 但每次我的表都是空的 我正在使用 ARC 这是简化的代码 HomeViewController h import
  • scrollToRowAtIndexPath:atScrollPosition:动画滚动太慢

    基于分页 UIScrollView 的页面更改 我正在调用scrollToRowAtIndexPath atScrollPosition animated到所显示的该页面的表详细信息 void scrollViewDidScroll UIS
  • 即席分发失败

    我在一家大公司工作 正在开发一个适用于 iOS 5 的 iOS 应用程序 分发应用程序的唯一方式是通过临时部署 我拥有自己的服务器已经有一段时间了 由 o2switch 法国托管商 托管 当我开始开发时 我们使用它来部署应用程序以进行 Be
  • 当 iPhone 设备方向朝上/朝下时,我可以判断它是横向还是纵向吗?

    我得到这个代码 如果设备处于左 右横向或上下颠倒状态 它会旋转并显示另一个视图控制器 但如果它的方向朝上或朝下 那么我如何判断它是横向模式还是纵向模式 因为我只想在它面朝上或朝下以及横向模式下旋转 void viewDidAppear BO
  • 从 NSString 的第一行删除换行符

    我怎样才能删除第一个 nNSString 中的字符 编辑 只是为了澄清一下 我想做的是 如果字符串的第一行包含 n 字符 请将其删除 否则不执行任何操作 即 如果字符串是这样的 nhello this is the first line n
  • 相机叠加图片

    edit 3 好消息和坏消息 好消息是 在连接检查器中 通过断开覆盖 UIToolbar 并连接 UIImageview 我看到theKing 但是 坏消息 我没有看到我也需要的 UIToolbar 所以现在的问题是 当用户完成这里操作后
  • 无限 UIScrollView 在 iOS4.3 中出现奇怪的行为,而不是 iOS5

    我已经实现了一个包含 UIView 的无限 UIScrollView 在 iOS5 模拟器和 iPhone 中滚动时 效果非常好 但在 iOS 4 3 sim 和手机 中 情况有点疯狂 滚动条传递的视图比应有的多 大约比 iOS5 多 10
  • iOS 复合谓词

    我正在编写一个具有照片数据库的应用程序 每张照片都有多个与之关联的标签 并且该应用程序有一个带有大量切换的搜索页面 允许用户仅根据他们感兴趣的标签搜索照片 每个标签都存储了integerID 是因为它们对应于外部数据库的 ID 所以我尝试简
  • 使用 iOS 设备作为 TCP 客户端 - 无 Bonjour

    我想使用 iOS 设备作为 TCP 客户端 但我找不到可理解的 API 指南 示例来说明如何做到这一点 我试过SimpleNetworkStreams and PictureSharing 但他们都使用 Bonjour 我可以轻松建立 UD
  • 处理核心数据中的重复条目

    我有一个允许用户保存收藏夹的应用程序 我正在使用 Core Data 将收藏夹存储为托管对象 我已经编写了一些代码来防止存储重复项的可能性 但我想知道是否有更好的方法来做到这一点 每个收藏夹对象都有一个唯一的 ID 字段 在下面的代码中 我
  • iPhone / iPad IOS 应用程序仪器内存计数与 task_info 内存计数

    我一直在使用 Instruments Leak Tester 它给出了大约 1 3 meg 的应用程序总分配数字 但是 当使用 task info 时 它会报告更大的内存量 例如 10 20 meg 我想我只是想确认task info正在返
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • UINavigationController 在后退按钮单击时向下滚动

    我正在开发一个带有多个导航控制器的 iPhone iPad 应用程序 当我在设备处于横向模式时单击视图的后退按钮时 前一个视图会垂直滚动到屏幕中 而不是像往常一样水平滚动 推送动画始终水平工作 正如它应该的那样 是什么导致了这个奇怪的问题
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i
  • 如何将 NSAppTransportSecurity 添加到 Cordova 项目

    我正在从事一个 ionic cordova 项目 该应用程序需要配置 iOS 9 版本的应用程序传输安全例外 有谁知道如何将以下配置添加到 cordova 项目配置文件中 配置 xml

随机推荐

  • 如何使用PhoneGap读写内部数据库?

    我有一个内部 SQLite DB Assets 我在其中存储了 100 个用户名和相应密码的文件夹 我如何通过phoneGap 访问它 我读过了 http docs phonegap com en 1 6 1 cordova storage
  • Selenium Webdriver - 等待页面在 Java&JavaScript(ajax/jquery/animation 等)中完全加载

    我正在尝试构建一种更好的方法来等待每次单击后加载页面 目前我使用的是这样的 public boolean waitForJSandJQueryToLoad WebDriverWait wait new WebDriverWait webDr
  • 按密度拆分的 APK 仍包含所有资源

    我决定尝试 apk sliptting 来减小 apk 的大小 我将以下内容添加到我的 gradle 构建文件中 splits Configures multiple APKs based on screen density density
  • 闪存记录 API

    谁能为 Flash AIR Flex 推荐一个好的 AS3 日志记录 API 除了编码事件之外 我还需要一些东西来捕获和记录鼠标和键盘事件 最好是有详细记录 支持的东西 提前致谢 我一直在使用霹雳 http code google com
  • 使用composer只需要1个文件?

    是否可以只需要 Composer 包中的 1 个文件 我只需要包中的 1 个或几个文件 当我只使用几个文件时 要求包含数百个文件的整个包是毫无意义的 可以通过作曲家来做到这一点吗 可以使用以下命令将特定文件包含在当前包中files自动加载策
  • Coredata非常慢;迅速

    我制作了一个 iOS 应用程序来跟踪设备的 GPS 路线 问题是 当我跟踪超过 5 分钟时 coredata 需要很长时间才能保存 我保存一个名为会话的对象 会话有很多位置对象 位置对象是 纬度 经度 会话对象看起来像 名称 string
  • Google Play Billing:如何模拟“帐户保留”状态(在调试/沙盒模式下)

    2020 年 11 月之前 Google Play 上的 Android 应用必须管理 帐户保留 状态 https developer android com distribute play policies https developer
  • AWS Fargate 中的文件

    是否可以在 Fargate 中实际写入 编辑 删除文件 由于它是无服务器的并且实际上没有文件系统 对此我无法得到明确的答案 例如 我们的一个客户需要在本地容器上写入一些临时缓存文件 这可能吗 我不想为此设置整个数据容器卷 Thanks Fa
  • 反序列化期间忽略属性

    我有一个非常好的序列化类 终于 现在我想向此类添加一个属性 但我根本不想将其序列化 是否可以添加带有某种属性的新属性 以便当我调用序列化或反序列化方法时 该属性将被忽视 XmlIgnore public int DoNotSerialize
  • 您最常重用的课程是什么?

    一段时间后 每个程序员都会得到一组实用程序类 其中一些是真正的编程珍珠 并且可以在您的多个项目中重复使用 例如 在java中 class Separator private String separator private boolean
  • php中如何将多个数组混合到一个数组中

    我正在从数据库获取数组 但它创建了多个数组 我只需要数据库中的一个数组 现在我只想从多个数组创建一个数组 我从数据库中获取了数组 Array 0 gt Array 0 gt 1 pro ref id gt 1 1 gt Array 0 gt
  • 通过 MinGW 上的 Swig/Python 以二进制模式使用 C++ 标准流

    我有一个用 C 编写的库 它使用标准流来读取和写入对象 我还有一个用 Swig 生成的 Python 接口 我用它来访问该库 在 Linux 上一切正常 但在 Windows 在 MinGW 上 上似乎不可能通过 Python 接口以二进制
  • 如何使用 netty 通过 HTTP 传输响应

    我正在使用 Netty 3 6 6 我想向调用者发送一个大的响应 我无法将响应正文复制到 ChannelBuffer 中 因为在某些情况下它会非常大 我正在将服务器从CXF迁移到Netty 以前 我只能使用CXF提供的OutputStrea
  • 为什么将 Count 与 IQueryable 一起使用被认为是不可行的

    如果我有以下代码 IQueryable
  • 如何即时更新 Eclipse 模板变量?

    我通过扩展点添加了以下新的 Eclipse 模板 它只是添加一个示例模板testTag tag
  • 一个身体可以在另一个身体里面吗?

    是否可以在外部 tbody 中包含内部 tbody 如下所示 这是一个 CSS 示例 这是示例 HTML table tbody class class1 tr td td td td tr tbody class class2 tr td
  • 未显示所有属性

    当我们尝试通过管道将数据导出到其他函数时 我们在 PowerShell 中观察到一些奇怪的行为 示例代码 Array Obj1 PSCustomObject Member1 First Member2 Second Obj2 PSCusto
  • 如何在oracle中使用SELECT查询创建空白/空列?

    我想在 oracle 中使用 选择 查询生成带有空白 空列的输出 我可以通过下面的 sql 查询来实现这一点 SELECT CustomerName AS Customer AS Contact FROM Customers 因此 当我运行
  • 具有多种角色的 Laravel 中间件

    我在 Laravel 的中间件方面遇到了一些问题 让我告诉你我想要实现的基本想法 该网站的注册用户将具有以下四种角色之一 学生 默认 可以访问 index and show views 审批者 可以访问上一个 加上 overview upd
  • 将 UIImageView 适配到 UIImage

    我有一个使用自动布局和约束设置的 UIImage 视图 我使用将图像适合图像视图 self selectPhoto contentMode UIViewContentModeScaleAspectFit NSLayoutConstraint