[英]Convert a UIView origin point to its Window coordinate system
我想在窗口坐標系中獲取scrollView的原點。 例如,當前,scollView的原點是(0,51)。 但是在窗口坐標系中,它應該是51 + 44(導航欄高度)+20(狀態欄高度)=115。在窗口坐標系中,scrollView.frame.origin的值應該是(0,115)。 我嘗試使用convertPoint:方法,但有時會得到(0,51)或(0,0)。 請為此提供解決方案。 謝謝
聽起來您沒有在適當的視圖之間轉換。 視圖的框架設置為其父視圖的坐標,而不是其自身的內部坐標,因此,如果您試圖將視圖的原點轉換為窗口坐標,則需要使用父視圖:
[[self superview] convertPoint:self.frame.origin toView:theWindow];
但是,將零點從視圖本身轉換為窗口甚至更簡單。 這兩段代碼是等效的,因此根本不需要使用源代碼。
[self convertPoint:CGPointZero toView:theWindow];
我嘗試使用TechZen解決方案,但無濟於事。 我沒有轉換scrollView的原點,而是使用apple docs UIWindow類Reference,並使用此代碼[self.view convertPoint:endCentre fromView:[UIApplication sharedApplication].keyWindow]
將鍵盤的endCenter轉換為視圖的坐標系。 這段代碼有效,因此解決了我的問題。 但是,問題仍然在於為什么它沒有給出正確的scrollView.origin坐標。因此,基本上,我得到了一種解決方法,方法是轉換鍵盤的中心距而不是scrollView.origin 。 哦,我正在做所有這些事情,以便在鍵盤出現在屏幕上時計算scrollView的新高度。 因此,如果有人對此問題有解決方案或更好的解決方案,請告知我們所有人。
請注意,這些功能僅在視圖控制器完成對子視圖的布局后才能使用。 因此,如果您希望在加載視圖時使用viewDidLayoutSubviews / viewDidAppear,但不能在viewDidLoad / viewWillAppear等中使用...
這段代碼對我有用:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGPoint originInSuperview = [self.view.superview convertPoint:CGPointZero fromView:self.scrollView];
}
迅速:
在ViewController的viewDidAppear(否則元素尚未分層)中:
var yourFrame = yourScrollView.convertRect(yourScrollView.frame, to: self.view)
//PRINT THE WHOLE RECT
print(yourFrame)
//PRINT A DETAILED VERSION OF THE FRAME, ALSO CAN PERFORM CALCULATION BETWEEN THE RECT PARAMETERS TO GET , FOR EXAMPLE, WIDTH POINT IN THE SUPERVIEW:
print("X: \(yourFrame.origin.x) Y: \(yourFrame.origin.y) WIDTH: \(yourFrame.width) HEIGHT: \(yourFrame.height)")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.