iOS坐標系轉換 convertRect

當我們想找到一個視圖的子視圖相對于當前控制器中的坐標位置時,用坐標轉換就可以很方便的找到了,如下圖所示:



如圖所示:從下到上依次是 self.view --> redView -->yellowView

redView的坐標:{{20, 20}, {335, 627}},加在控制器的view上

yellowView的坐標:{{20, 20}, {295, 587}},加在redView上

CGSize size = self.view.frame.size;

UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, size.width - 40, size.height - 40)];

redView.backgroundColor = [UIColor redColor];

[self.view addSubview:redView];

UIImageView *yellowView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, redView.frame.size.width - 40, redView.frame.size.height - 40)];

yellowView.backgroundColor = [UIColor yellowColor];

[redView addSubview:yellowView];

NSLog(@"%@ --- %@", NSStringFromCGRect(redView.frame), NSStringFromCGRect(yellowView.frame));

//? ? 輸出{{20, 20}, {335, 627}} --- {{20, 20}, {295, 587}}


//把 yellowView.frame 從 redView 的坐標系轉換到 self.view 的坐標系

// 如果傳入的是 yellowView.frame,則要用 yellowView 的父視圖來調用,toView:傳入的參數是最終要轉換到的那個視圖。

//? ? CGRect rect = [redView convertRect:yellowView.frame toView:self.view];? ? // 這個和下面一句一樣

// 如果傳入的是 yellowView.bounds,則要用 yellowView 本身來調用,toView:傳入的參數是最終要轉換到的那個視圖。

CGRect rect = [yellowView convertRect:yellowView.bounds toView:self.view]; // 這個和上面一句一樣

CGRect frame = [self.view convertRect:yellowView.frame fromView:redView];

NSLog(@"%@, %@", NSStringFromCGRect(rect), NSStringFromCGRect(frame));

//? ? 輸出{{40, 40}, {295, 587}}, {{40, 40}, {295, 587}}

//把 yellowView.frame.origin 從 redView 的坐標系轉換到 self.view 的坐標系

CGPoint point = [redView convertPoint:yellowView.frame.origin toView:self.view];

CGPoint point1 = [self.view convertPoint:yellowView.frame.origin fromView:redView];

NSLog(@"%@, %@", NSStringFromCGPoint(point), NSStringFromCGPoint(point1));

// 輸出{40, 40}, {40, 40}

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • UIView(控件) 功能一:界面顯示1. 屏幕上顯示的所有UI元素都叫做控件,也有人叫做視圖、組件;按鈕(UIB...
    翻這個墻閱讀 656評論 0 0
  • 1、簡單的兩個view放到控制器的view里,其中blueView是redView的子控件 2、拖線到控制器里,打...
    XIAODAO閱讀 279評論 6 2
  • 一、首先來看看一下我們的需求 將yellowView(黃色view)所在的frame轉換為blueView(藍色v...
    hj的簡書閱讀 2,330評論 0 3
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,572評論 6 30
  • 在iOS實際開發中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉場動畫。 1.UIView...
    請叫我周小帥閱讀 3,159評論 1 23