- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我的观点是复制许多使用照片的应用程序的行为,当 UIScrollView
和 UIImageView
被呈现时,它使图像适合屏幕大小,即使这样图像较小。
我确定这不应该通过 UIImageView
框架完成,而应该由 UIScrollView
操作,但是如何...?
在我的代码中,我有一个名为 updateZoom
的方法,它计算 minimumZoomScale
值并将该值分配给 zoomScale
属性。我想这是进行数学运算和手动计算 zoomScale
的正确位置。
这是方法:
- (void)updateZoom {
float minZoom = MIN(self.view.bounds.size.width / self.imageView.image.size.width, self.view.bounds.size.height / self.imageView.image.size.height);
if (minZoom > 1) {
minZoom = 1;
}
self.scrollView.minimumZoomScale = minZoom;
self.scrollView.zoomScale = minZoom;
}
我希望有人能告诉我如何设置 zoomScale
以适应 UIScrollView
边界。
最佳答案
上述解决方案有效,但我一直在努力理解其中的原因。我想分享这两篇文章,我发现它们对正确设置 mininumZoomScale 并使其与 iOS8/XCode 6 一起工作非常有帮助。
首先,要使 ScrollView 在 iOS8 上正常工作,需要您从一开始就正确设置约束。其他发帖人建议,我同意,您的 ScrollView 应该只有一个内容 View 。将所有其他 View 嵌入到一个内容 View 中很好,但您不想将 ScrollView 约束设置为一堆小 View 。
将顶部、前导、尾部和底部约束连接到内容 View (在我的例子中是 UIImageView)的 ScrollView ,常量为 0。这会将内容 View 的边缘设置为 ScrollView 。
接下来,使用 Equal Width 和 Equal Height 约束将内容 View 的大小设置为 ScrollView 。您不能在内容 View 中使用 Fixed Width 和 Fixed Height,因为缩放不起作用,您也不能自己管理大小。如果没有这些限制,iOS8 会在您有机会产生一些奇怪的伪像之前将大小设置为 (0,0)。有了这些约束,在方向方法中调用 updateZoom 方法就可以了。在 iOS7 中,在 didRotateFromInterfaceOrientation 中调用它。在 iOS8 中从 viewWillTransitionToSize 调用它。您需要更新代码以传入新尺寸。
非常感谢 Natasha The Robot 的约束解决方案:http://natashatherobot.com/ios-autolayout-scrollview/
当您调用 updateZoom 方法来调整您的最小值时,您还应该检查您当前的 zoomScale 是否小于您的 minimumZoomScale,如果是则重置它。否则您不应该重置 zoomScale,因为当方向改变时,这会成为您用户的另一种疑惑表情。
至于其余部分以及为什么数学有效,objc.io 的 Joe Conway 在这篇关于 UIScrollView 的边界与框架的精彩文章中进行了阐述:http://www.objc.io/issue-3/scroll-view.html
感谢以上两位和发帖人。
-(void)updateZoom {
self.scrollView.minimumZoomScale = MIN(self.scrollView.bounds.size.width / self.imageView.image.size.width, self.scrollView.bounds.size.height / self.imageView.image.size.height);
if (self.scrollView.zoomScale < self.scrollView.minimumZoomScale)
self.scrollView.zoomScale = self.scrollView.minimumZoomScale;
}
关于ios - 设置 UIScrollView 缩放比例以适应屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25927402/
我遇到了问题,似乎无法解决。 基本上,我希望我的菜单和文本随着分辨率的变化/放大/缩小而调整大小;图片工作正常,内容 div 工作正常,只是菜单似乎无法适应。 请帮我解决这个问题.. 普通 View
我在map reduce上开发了大约20个工作,包括pagerank算法。我从未发现任何具有挑战性的问题可以在线适应mapreduce框架。我想提高自己的技能。有这样的指南吗? 最佳答案 您正在寻找的
我了解到 Java 中没有 NOR,我可以使用 !A && !B 或 !(A||B)。既然 A 和 B 都是假的,为什么我不能使用 !A || B? 最佳答案 因为Java没有NOR运算符,你的表达式
我需要根据构建 CLI 工具的要求评估“GO”,该工具应该可以在不同的操作系统中运行。这是如何在诸如“Cloud Foundry CLI”之类的 CLI 工具中实现的?GO 如何处理这种对操作系统的适
所以我试图让我的下拉菜单正常工作。下拉列表位于我的标题中的列表项下,该列表项会根据用户的用户名而变化。这使得大小不同,但我无法让下拉菜单跟随宽度调整大小。 示例 1: http://jsfiddle.
我已经很努力了,但我还是被 matplotlib 卡住了。请忽略,mpl 文档让我有点困惑。我的问题涉及以下方面: 我用 matshow 函数画了一个对称的 n*n 矩阵 D。行得通。 我想做同样的事
我正在尝试调整 Boyer-Moore c(++) Wikipedia implementation获取字符串中模式的所有匹配项。实际上,维基百科实现返回第一个匹配项。主要代码如下: char* bo
我在底部嵌套了带有文本的 flex 元素。顶部元素具有小于文本的固定宽度: .list-header { display: flex; width: 150px; height: 80px
我想初始化 std::any带有仅 move 类型变量。我找到了 Cannot move std::any . 编译错误案例 在使用链接答案中的 shared_ptr 解决方法之前,我测试了以下代码:
现在我正在使用 webview 处理 ListView 。在这个 listview webview 中用于显示图像。它来自 url。现在我面临一个问题,我无法从 url 获得唯一尺寸的图像,一些图像很
我的文件夹结构是这样的: src --main.cpp tests --src ----main_test.cpp Makefile 我想制作一个像make main_test这样的目标,以便能够以.
前段时间我也在讨论类似的话题。我正在查看我的应用程序,我认为它有很多不必要的代码。我的意思是我有服务负责从两家书店的不同类别的书籍中抓取数据。现在我有 5 个类别,所以我有 5 个方法,但如果我要添加
我使用多个 div 子元素创建父元素,然后根据 data-value 属性在 JavaScript 中计算这些子元素的宽度。 如果我对所有 child 的计算宽度求和,我最终将得到 100%。但出于某
我像这样使用减速板 gem : require 'airbrake' Airbrake.configure do |config| config.api_key = 'XXXXX' confi
我们在企业环境中有一个 svn 存储库结构,如下所示: root libs shared_lib1 shared_lib2 private_lib public_cod
我制作了一个应用程序,其中有许多从 UIView 子类化的 View 。这些 View 的大小和方向是随机的,并且可以保存应用程序屏幕的状态。当用户在打开屏幕的同一设备上保存屏幕时,屏幕状态为“正常”
我需要调整 lucene 的 StandardTokenizer 以适应有关 twitter 数据的一些特殊目的。目前,我使用 StandardTokenizer 来标记一些我想要处理的推文。它工作得
在Windows Store应用中,如果内容是固定的,我们可以把它封装成一个ViewBox,让内容适应不同的分辨率。但是,如果内容不固定,在我的应用程序中,有一个 GridView 哪些项目是动态的,
一切都在标题中。 在我的应用程序中,根据用户所做的选择,我用一个列表填充一个组合框,该列表有时很小(1 个元素)有时很大(150 个元素)。 我想要的不是在启动时将固定高度设置为给定值,而是将 max
我的 2 div 动画感谢我下面的 jquery 脚本。当屏幕小于 700px 时,div 变成更小的正方形(35px 而不是 50px)。我希望 .animate({width:100px}); 仅
我是一名优秀的程序员,十分优秀!