2017-10-09 6 views
0

저는 아직 새로운 것이므로 부모보기의 하단 하단에 컨테이너보기를 배치하는 것이 좋습니다 (포함되는 부분은 외부에 있습니다. 처음에는보기). 그런 다음 사용자가 버튼을 터치하면 컨테이너가 애니메이션되고 모든 것이 표시되도록 위로 이동합니다.Swift : 부모보기의 맨 아래에 컨테이너보기를 올바르게 배치하는 방법은 무엇입니까? (또는 컨테이너보기가 아닌 다른 옵션이 있습니까?)

애니메이션이 제대로 작동하지만 위치가 어렵습니다. 여기에 지금까지 무엇을했는지 있습니다 :

@IBOutlet var testView: UIView! 
override func viewDidLoad() { 
     super.viewDidLoad() 

     testView.frame.size = CGSize(width: view.bounds.width, height: 400) 
     testView.layer.position = CGPoint(x: view.frame.midX, y: view.frame.maxY + 90) 
     view.addSubview(testView) 
    } 

그래서 나는 수퍼 및 (400)의 고정 된 크기의 폭에 컨테이너보기를 설정 한 그리고 나는 그렇게 화면 하단 중앙에 배치하려고 그 부분은 보이고 부분은 화면 밖에있다. 그래서 여기

@IBAction func showMoreButton(_ sender: UIButton) { 
    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: {self.testView.transform = CGAffineTransform(translationX: 0, y: -190) 

    }, completion: nil) 

난 그냥 용기 (190) 위로 이동 : 여기

애니메이션 부분입니다. 컨테이너 하단에는 표시되지 않는 닫기 버튼이 있습니다 (아직 수퍼 뷰 외부에 있음).

나는 그 문제와 관련하여 view.frame.maxY + 90 (즉 90 픽셀이 표시됨)에서 뷰를 직접 배치하는 방법이라는 것이 확실합니다. 뷰 높이를 줄이면 컨테이너의 원래 위치가 점점 더 아래로 이동합니다. 애니메이션 후에 모든 것이 표시되지만 분명히 작습니다. UIKit의 원점은 0,0의 왼쪽 상단에 있기 때문에 수퍼 뷰의 맨 아래에 뷰를 배치하여 약 90 픽셀이 표시되도록하고 애니메이션이 완료되면 뷰가 모두 표시되도록하는 방법을 생각했습니다. 위로 이동하고 이제 superview에 표시됩니다.

어떻게하면됩니까?

답변

0

내가 이해하는 한, 맨 위에 표시되는 리드 버튼 만있는보기를 원한다는 것입니다. 버튼을 탭하면보기가 위로 올라와 전체 내용으로 표시됩니다.

내용보기 프레임의 Y 오프셋 만 조작하면됩니다.

let contentHeight = CGFloat(250) // Full content height 
let contentOffset = CGFloat(40) // Offset for the lead button 

func displayBottomView(offset: CGFloat) { 
    redContentView.frame = CGRect(x: 0, y: view.frame.size.height-offset, width: view.frame.size.width, height: contentHeight) 
} 

이렇게하면보기 컨트롤러를 구성해야합니다.

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Set the initial position to show only a button 
    displayBottomView(offset: contentOffset) 
} 

@IBAction func redButtonDidTap(_ sender: UIButton) { 
    UIView.animate(withDuration: 0.5) { 
     // Animate displaying of the full content 
     self.displayBottomView(offset: self.contentHeight) 
    } 
} 

이 방법은 효과가 있지만 레이아웃 조작에는 적합하지 않습니다. 자동 레이아웃 방식으로 전환하는 것이 좋습니다.