Nis*_*hit 30 uiview coordinate-systems uiwindow ios
我想在窗口坐标系中获取scrollView的原点.例如,目前,scollView的起源是(0,51).但是在窗口坐标系中它应该是51 + 44(导航栏高度)+20(状态栏高度)= 115.在窗口坐标系中,scrollView.frame.origin应该是(0,115).我尝试使用convertPoint:方法,但有时会得到(0,51)或(0,0).请提供解决方案.谢谢
Tec*_*Zen 55
听起来你不是在正确的观点之间转换.视图的框架设置为其超视图的坐标,而不是其自己的内部坐标,因此如果您尝试将视图的原点转换为窗口坐标,则需要使用superview:
[[self superview] convertPoint:self.frame.origin toView:theWindow];
Run Code Online (Sandbox Code Playgroud)
但是,将零点从视图本身转换为窗口更为简单.这两段代码是等价的,因此根本没有必要使用原点.
[self convertPoint:CGPointZero toView:theWindow];
Run Code Online (Sandbox Code Playgroud)
Nis*_*hit 10
我尝试使用TechZen解决方案,但无济于事.我没有转换scrollView的原点,而是提到了apple docs UIWindow类Reference,并使用这段代码将键盘的endCenter转换为我视图的坐标系[self.view convertPoint:endCentre fromView:[UIApplication sharedApplication].keyWindow].这段代码工作,因此解决了我的问题.然而,问题仍然是为什么它没有给出scrollView.origin.So的正确坐标,基本上我通过转换键盘endcenter而不是scrollView.origin得到了一个解决方法.哦,我正在做所有这些事情,以便在键盘出现在屏幕上时计算我的scrollView的新高度.所以,如果有人能解决这个问题或任何更好的解决方案,请让我们所有人都知道.
请注意,这些功能仅在视图控制器完成布局子视图后才起作用.因此,如果您希望在加载视图时使用,则可以使用viewDidLayoutSubviews/viewDidAppear,但不能使用viewDidLoad/viewWillAppear等...
这段代码对我有用:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGPoint originInSuperview = [self.view.superview convertPoint:CGPointZero fromView:self.scrollView];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36780 次 |
| 最近记录: |