2016-07-26 2 views
-1

나는 UIView 안에 또 UIView이 있습니다.ViewcController - iOS Swift에 따라 센터보기

ViewControllerView에 따라 내부 UIView 위치를 설정하는 가장 좋은 방법은 무엇입니까, 그리고 그 superView에?

func answerViewTapAction(sender: UITapGestureRecognizer) { 
    if let myViewIndex = returnActiveView() { 
     var choosenView: numberView! 
     print("view \(myViewIndex) will move to slot \(sender.view!.tag)") 
     for noView in noViews { 
      if noView.tag == myViewIndex { 
       choosenView = noView 
      } 
     } 
     //print(choosenView.center) 
     print(sender.view!.center) 
     UIView.animateWithDuration(0.7, animations: { 
      choosenView.center = CGPoint(
       x: CGRectGetMidX(sender.view!.frame), 
       y: CGRectGetMidY(sender.view!.frame)) 
     }) 
    }else { 
     print("view will not move") 
    } 
} 

나는 그 superView에 따라되지는 ViewController에 따라 내 sender.view 센터에 액세스하려면.

+0

childView에 이름을 추가하고 그것에 대한 액세스 또는 속성을 설정합니다. 코드에 대해 – jdave

+0

코드에 대한 액세스를 시도하고 있습니다. 수퍼 뷰 –

+0

@jdave에 따라 좌표를 얻습니다. 대답, 나는 너를 그만 두지 않았다. –

답변

1

convertPoint 방법을 UIView으로 설정합니다. 특히 convertPoint(_ point: CGPoint, toView view: UIView?) -> CGPoint. Documentation here.

예제가 필요하면 알려주십시오. 한 번 호출 한 다음 알아 내려고하는 뷰의 수퍼 뷰를 toView 전달해야합니다.

편집 : 예를 들면 우리가 간다!

세 가지보기 : A, B 및 C를 고려해 보겠습니다. 멋진 ASCII 미술을 따라가보십시오.

(0, 0, 20, 20) 
+----------------------------------+ 
| A        | 
| (5, 5, 10, 10)    | 
| +--------------------+  | 
| |B     |  | 
| | (5, 5, 5, 5) |  | 
| | +-----------+ |  | 
| | |C   | |  | 
| | |   | |  | 
| | |   | |  | 
| | |   | |  | 
| | |   | |  | 
| | |   | |  | 
| | |   | |  | 
| | +-----------+ |  | 
| |     |  | 
| |     |  | 
| +--------------------+  | 
|         | 
|         | 
|         | 
+----------------------------------+ 

보기 A는 ViewController.view이며 X에서의 0, Y : 0, 폭 : 20, 높이 : 20 보기 B가의 하위 뷰이며 X에있어 : ​​5 Y : 5 , 너비 : 10, 높이 : 10 (보기에 따라) A. 보기 C는 B의 하위보기이며보기 B에 따라 X : 5, Y : 5, 너비 : 5, 높이 : 5에 있습니다. 그러나보기 A 보기 B가 5, 5에 있기 때문에 C는 실제로 X : 10, Y : 10에 있습니다. 보기 A에 따라보기 C의 원점을 알아 내기 위해 필요한 것은 convertPoint입니다.

let originOfC = B.convertPoint(C.frame.origin, toView: A) 

을 그리고 그것 뿐이다 :

방법 그것을 할 수 있습니다. fiew 루프를 사용하여 프로그램 적으로 동일한 작업을 수행 할 수 있지만 위의 예제는 다소 깔끔합니다. 이제 나는 당신에게 기원에 대한 모범을 보여주었습니다. 중심을 얻으려면 view.center 속성을 사용하거나 x 좌표에 C 좌표의 절반을 originOfC, y 높이의 절반을 originOfC으로 추가하면됩니다.

+0

예. 제발, 당신이 예제를 제공 할 수 있습니다. –

+0

예를 들어 업데이트되었습니다. – Majster