2017-05-02 5 views
1

스위프트의 컬렉션보기에 서브 뷰로 ImageView을 추가했습니다. 이 하위 뷰의 초기 지점은 앵커 포인트가 viewDidLoad()에 배치되어 있습니다. 그러나보기에서 탭 동작 후에 키보드를 사퇴 한 후 ImageView은 원래 위치로 돌아갑니다. 이 문제를 어떻게 해결할 수 있을까요?키보드를 사퇴 한 후 하위 동작을 팬 제스처와 함께 계속 유지하려면 어떻게해야합니까?

import UIKit 

class MessageViewController: UICollectionViewController,UICollectionViewDelegateFlowLayout { 

    let imageButton: UIImageView = { 
     let imageButtonView = UIImageView() 
     imageButtonView.image = UIImage(named: "image.png") 
     imageButtonView.layer.cornerRadius = 30 
     imageButtonView.layer.masksToBounds = true 
     imageButtonView.isUserInteractionEnabled = true 
     return imageButtonView 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //add imageButton 
     view.addSubview(imageButton) 

    //  recognize tapgesture for removing keyboard 
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tap(gesture:))) 
     self.view.addGestureRecognizer(tapGesture) 

     let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(gesture:))) 
     imageButton.addGestureRecognizer(panGesture) 
    } 


    func handlePan(gesture: UIPanGestureRecognizer) { 

     let translation = gesture.translation(in: self.view) 
      if let view = gesture.view { 
       view.center = CGPoint(x:view.center.x + translation.x, y:view.center.y + translation.y) 
    } 
    gesture.setTranslation(CGPoint.zero, in: self.view) 
    } 


    imageButton.translatesAutoresizingMaskIntoConstraints = false 

    imageButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
    imageButton.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 30).isActive = true 
    imageButton.heightAnchor.constraint(equalToConstant: 60).isActive = true 
    imageButton.widthAnchor.constraint(equalToConstant: 60).isActive = true 

} 
+0

우리가 더 나은 당신의 질문을 이해하는 데 도움이되는 몇 가지 코드와 영상을 공유하세요 조정하지,이 사용하는 경우에만 제약을보십시오. – dmorrow

+0

몇 가지 코드를 추가했습니다. 그것이 내 질문에 대답하는 데 도움이되기를 바랍니다. 이것은 뷰가로드되면 화면의 중간에있는 이미지를 제공합니다. 나중에 나는 그것을 자유롭게 끌 수있다. 그러나 키보드를 사임 한 후에 만 ​​이미지가 원래 위치로 돌아갑니다. – Bob

답변

0

나는 키보드가 기각 된 후, view.setNeedsLayout()가 원래 위치로 제약 조건을 재설정하는,이라고 가정합니다.

는 경계 (또는 센터)

let imageCenterXConstraint:NSLayoutConstraint = NSLayoutConstraint() 
let imageCenterYConstraint:NSLayoutConstraint = NSLayoutConstraint() 

func viewDidLoad() { 
    super.viewDidLoad() 

    //add imageButton 
    view.addSubview(imageButton) 

    //  recognize tapgesture for removing keyboard 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tap(gesture:))) 
    self.view.addGestureRecognizer(tapGesture) 

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(gesture:))) 
    imageButton.addGestureRecognizer(panGesture) 
    imageButton.translatesAutoresizingMaskIntoConstraints = false 

    imageCenterXConstraint = imageButton.centerXAnchor.constraint(equalTo: view.centerXAnchor) 
    imageCenterXConstraint.isActive = true 
    imageCenterYConstraint = imageButton.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 30) 
    imageCenterYConstraint.isActive = true 
    imageButton.heightAnchor.constraint(equalToConstant: 60).isActive = true 
    imageButton.widthAnchor.constraint(equalToConstant: 60).isActive = true 
} 

func handlePan(gesture: UIPanGestureRecognizer) { 
    let translation = gesture.translation(in: self.view) 
    if let view = gesture.view { 
     imageCenterXConstraint.constant = translation.x 
     imageCenterYConstraint.constant = 30 + translation.y 
     view.layoutIfNeeded() 
    } 
    gesture.setTranslation(CGPoint.zero, in: self.view) 
} 
+0

답장을 보내 주셔서 감사합니다. 불행히도, 그것은 나를 위해 작동하지 않았다. 나는 그것에 대해 연구 할 것이고 그것을 해결했는지 알려줄 것입니다. – Bob