如何获得屏幕视口的框架'在缩放的uiview?

时间:2015-09-03 21:55:56

标签: ios swift uiview uiimageview

我有一个UIImageView,可以通过手势控制进行缩放和平移。 (我没有使用UIScrollView,除了我正在从教程构建并且直到稍后才学习滚动视图之外没有任何理由。)

我想添加另一个视图作为主图像视图的子视图,我希望新视图的框架是屏幕上显示的区域。即如果主图像被放大到非常精细的细节,以便只显示一小部分图像,那么我希望新视图的框架只是那个可见的部分。

同样,如果主视图缩小了,所以它在屏幕上显得非常小,我希望新视图的框架相对非常大,包含屏幕上显示的所有内容。

更喜欢Swift语言的答案,但我可以从Objective C转换。

如果它是相关的:所有这一切的最终应用是手势绘图,以便我分配适当的空间和数量。用户可能尝试的区域资源&画。制作新的" UIBezierCurveView"的框架会浪费你的记忆力。是整个(高分辨率)图像的框架,如果它们被放大了。

2 个答案:

答案 0 :(得分:0)

听起来你想要在整个可扩展的区域铺设某种覆盖层。

你可以在UIImageView上面添加一个UIView。以这种方式:

-Superview
    -UIView (call this OverlayView)
        -Anything you want on that UIView
    -(pan-able)UIImageView

然后你只需要确保UIView没有响应触摸事件,然后使用它们向下传递给UIImageView(对不起Obj-C虽然它非常简单):

//set it to false to let touches go through
OverlayView.userInteractionEnabled = NO; 

答案 1 :(得分:0)

想出来。为将来出现的任何人发布此答案。解决方案是一行:

let frame = imageView.convertRect(rootView.bounds, fromView: rootView)

...其中imageView是有问题的UIImageView,rootView是默认情况下在Storyboard中提供的UIView,它包含UIImageView。 (不需要引入新的覆盖,并且userInteractionEnabled无关紧要。)

注意:即使您将作为@IBObject的rootView从Storyboard连接到ViewController.swift,它也不会被分配并返回nil。 您还必须将r​​ootView与UIImageView连接,并选择一个关于它应如何充当UIImageView容器的选项(I 我认为我选择了水平中心。只有这样才能使用rootView。