簡體   English   中英

將UIView原點轉換為其窗口坐標系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM