我正在使用名为WSCoachMarksView的coachmarks /向导框架,它会使整个屏幕变暗,并允许您在给定的CGRect中创建突出显示的区域以阐明号召性用语。我有一个有点复杂的视图层次结构,并且无法正确识别我想要关注父窗口的CGRect。
这是我的层次结构。我们的目标是找到Day1的CGRect,它是一个高度约为50像素,宽度为25像素的图像视图。
-TabViewController
-NavigationViewController
-HomeViewController:ViewController
-Container View(homeviewcontroller内的容器)
====================以下所有内容都在此容器内==============
- HomeContainerViewController:ViewController(此视图在容器内加载)
-WeekViewController:ViewController
DayView(只是我拖到WeekViewController上以保存子视图的视图)
Day1(这是上面DayView中的矩形图像视图)
因此HomeViewController中有一个容器视图。基于上面的层次结构,我尝试了多种排列来正确地突出显示Day1,但都失败了。我认为我对convertPoint的理解是错误的,并希望在理解要传递的参数方面寻求帮助。
我在某处读到你只能处理父母/子女之间的关系,而不是祖父母等等?
鉴于此:
//assume tabViewController is the TabViewController above
//assume weekViewController is self.view, or WeekViewController
let day1Point = weekViewController.view.convertPoint(day1.frame.origin, fromView: tabViewController.view)
所以很遗憾,这样的事情突出了屏幕左上角的区域(我的第1天实际上是在屏幕中间附近)。
convertPoint或convertRect的方法是什么?它始终是层次结构树中的叶节点,“fromView”参数是最顶层的视图(父节点)吗?
非常感谢,非常感谢任何澄清/建议!
修改 所以这样的事情让我更接近:
var myFrame: CGRect = dayView.convertRect(day1.frame, toView: self.view)
但它仍然略有不同取决于iPhone 5,5s,6,6plus(仅显示部分图像)。
答案 0 :(得分:2)
OP注意:
嗯,转换的方式是它将取绝对点并将其转换为不同的参考视图。
所以你应该可以做这样的事情......
从WeekViewController你应该能够......
self.view.convertPoint(day1.frame.origin, toView:homeViewController.view)
...或
self.view.convertRect(day1.frame, toView:homeViewController.view)
您需要对homeViewController的引用才能执行此操作。我,我不确定你想要做什么。您的代码在哪里突出显示视图?是homeViewController中的代码吗?