2016-11-20 4 views
0

나는 내 코드가 작동하지 않는 이유를 아무 생각이 이미지 뷰 (나는 그것을 볼 수 있습니다)AddGesture Swift 3에서 다른가요?

func handleSelectProfileImageView() { 
    print("123") 
} 

그러나 아무것도 콘솔에 반환 얻는있는 viewDidLoad에로드

let profileImageView: UIImageView = { 
    let image = UIImageView() 
    image.image = UIImage(named: "gameofthrones_splash") 
    image.translatesAutoresizingMaskIntoConstraints = false 
    image.contentMode = .scaleAspectFill 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
    image.addGestureRecognizer(tapGesture) 
    image.isUserInteractionEnabled = true 

    return image 
}() 

때 그것에 두드리고있어! WTF?

+0

시도 - – Gyanendra

+0

무엇을 의미합니까? – petaire

+0

image = UIImageView()에서 viewDidLoad와 같은 다른 곳에 넣고이 메서드 내에서 이미지 변수를 사용합니다. – Gyanendra

답변

1

목표에 있습니다. 이것은있는 viewDidLoad()에서 때 발생하는 작동합니다

profileImageView.frame = CGRect(x: 60, y: 60, width: 70, height: 70) 
view.addSubview(profileImageView) 
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
profileImageView.addGestureRecognizer(tapGesture) 

대상은 UIViewController에 (안있는 UIImageView)는 "자기"입니다. 대부분의 경우 (특이 치가 있음을 확신합니다) 뷰에 제스처를 기록하고 뷰 컨트롤러에서 제스처를 사용하려고합니다.

+0

아니요,하지만 게으른 것을 추가해야했습니다 ... 고정되었습니다. – petaire

1

좋아요, 해결책은 사실 아주 간단했습니다. let 대신 lazy var로 만들어야합니다.

lazy var profileImageView: UIImageView = { 
    let image = UIImageView() 
    image.image = UIImage(named: "gameofthrones_splash") 
    image.translatesAutoresizingMaskIntoConstraints = false 
    image.contentMode = .scaleAspectFill 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
    image.addGestureRecognizer(tapGesture) 
    image.isUserInteractionEnabled = true 

return image 
}() 
0

스위프트 3.0 : 나는 그것을 제거 몇 가지 오류가 발생했습니다 - 그냥 내가 이미지를 제거 테스트

override func viewDidLoad() { 
     super.viewDidLoad() 

     var profileImageView:UIImageView { 
      var image = UIImageView() 
      image.backgroundColor = UIColor.red; 
      image.frame = CGRect(x: 0, y: 0, width: 44, height: 44) 
      image.translatesAutoresizingMaskIntoConstraints = false 
      image.contentMode = .scaleAspectFill 
      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
      image.addGestureRecognizer(tapGesture) 
      image.isUserInteractionEnabled = true 

      return image 
     } 

     view.addSubview(profileImageView); 


     // Do any additional setup after loading the view. 
    } 

func handleSelectProfileImageView() { 
     print("123") 
    } 

있는 viewDidLoad

에이 코드를 넣어, 당신은 그것을 추가 할 수 있습니다. 그러나 잘 작동합니다. 이미지 뷰를 유지하기>

let profileImageView: UIButton = { 
    let iv = UIButton() 
    let image = UIImage(named: "r2d2") 
    iv.setImage(image, for: .normal) 
    iv.translatesAutoresizingMaskIntoConstraints = false 
    iv.addTarget(self, action: #selector(selectProfileImage), for: .touchUpInside) 
    iv.isUserInteractionEnabled = true 
    return iv 
}() 

@objc func selectProfileImage(){ 
    print("Hello") 
} 
0

는 나는있는 UIButton를 사용하여이 문제를 해결했습니다. 인스턴스가 공개 될 수 있습니다. 이미지를 전역으로 초기화하고 제스처를 추가하십시오.
관련 문제