IT story

Swift에서 UIImageView 객체에 액션을 할당하는 방법

hot-time 2020. 5. 27. 07:41
반응형

Swift에서 UIImageView 객체에 액션을 할당하는 방법


UIImageView사용자가 탭할 때 액션 을 할당하려고 합니다.

에 대한 액션을 만드는 방법을 알고 UIButton있지만의 동일한 동작을 모방 할 수는 UIButton있지만 UIImageView?


당신이 필요합니다 UITapGestureRecognizer. 설정하려면 다음을 사용하십시오.

override func viewDidLoad()
{
    super.viewDidLoad()

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
    imageView.isUserInteractionEnabled = true
    imageView.addGestureRecognizer(tapGestureRecognizer)
}

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)
{
    let tappedImage = tapGestureRecognizer.view as! UIImageView

    // Your action
}

(당신은 또한 사용할 수 UIButton및 텍스트없이, 그것은에 이미지를 할당하고 단순히보다는 연결 IBAction)


에 제스처 인식기를 추가해야합니다 (탭 사용 UITapGestureRecognizer , 길게 누르기 UILongPressGestureRecognizer ) UIImageView.

let tap = UITapGestureRecognizer(target: self, action: #selector(YourClass.tappedMe))
imageView.addGestureRecognizer(tap)
imageView.isUserInteractionEnabled = true

그리고 다음과 같이 선택기 방법을 구현하십시오.

@objc func tappedMe()
{
    println("Tapped on Image")
}

UITapGestureRecognizerimageView 에 a 추가하고 Storyboard / xib로 a를 드래그하고 imageView에서 gestureRecognizer로 Ctrl- 드래그하고 gestureRecognizer에서 Swift 파일로 Ctrl- 드래그하면을 만들 수 IBAction있습니다.

UIImageView이 이미지와 같이 의 사용자 상호 작용을 활성화해야합니다 .여기에 이미지 설명을 입력하십시오


swift 2.0 이상에서는

@IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tappedMe))
        imageView.addGestureRecognizer(tap)
        imageView.userInteractionEnabled = true
    }
    func tappedMe()
    {
        print("Tapped on Image")
    }

스위프트 4 코드

이 새로운 확장 방법을 사용해보십시오 :

import UIKit

extension UIView {

    fileprivate struct AssociatedObjectKeys {
        static var tapGestureRecognizer = "MediaViewerAssociatedObjectKey_mediaViewer"
    }

    fileprivate typealias Action = (() -> Void)?


    fileprivate var tapGestureRecognizerAction: Action? {
        set {
            if let newValue = newValue {
                // Computed properties get stored as associated objects
                objc_setAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
            }
        }
        get {
            let tapGestureRecognizerActionInstance = objc_getAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer) as? Action
            return tapGestureRecognizerActionInstance
        }
    }


    public func addTapGestureRecognizer(action: (() -> Void)?) {
        self.isUserInteractionEnabled = true
        self.tapGestureRecognizerAction = action
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture))
        self.addGestureRecognizer(tapGestureRecognizer)
    }


    @objc fileprivate func handleTapGesture(sender: UITapGestureRecognizer) {
        if let action = self.tapGestureRecognizerAction {
            action?()
        } else {
            print("no action")
        }
    }

}

이제 와 같은 또는 서브 클래스 UITapGestureRecognizer에 a 를 추가하려고 할 때마다 셀렉터를위한 관련 함수를 만들지 않고도 그렇게 할 수 있습니다!UIViewUIViewUIImageView

용법:

 profile_ImageView.addTapGestureRecognizer {
        print("image tapped")
    }

실제로의 이미지를 UIButton일반적으로에 넣을 이미지로 설정할 수 UIImageView있습니다. 예를 들어, 어디에서 할 것인가 :

myImageView.image = myUIImage

대신 다음을 사용할 수 있습니다.

myButton.setImage(myUIImage, forState: UIControlState.Normal)

코드는 다음과 같습니다.

override func viewDidLoad(){
  super.viewDidLoad()

  var myUIImage: UIImage //set the UIImage here
  myButton.setImage(myUIImage, forState: UIControlState.Normal)
}

@IBOutlet var myButton: UIButton!
@IBAction func buttonTap(sender: UIButton!){
  //handle the image tap
}

이 방법을 사용할 때 가장 좋은 점은 데이터베이스에서 이미지를로드해야하는 경우 이미지를 설정하기 전에 단추 제목을 설정할 수 있다는 것입니다.

myButton.setTitle("Loading Image...", forState: UIControlState.Normal)

사용자에게 이미지를로드하고 있다고 알리려면


당신은 넣을 수 있습니다 UIButton 의 상단 위에 투명 배경 UIImageView이미지를로드하기 전에 버튼을 탭에 대해 듣고


스위프트 4 코드


ViewdidLoad ()의 1 단계

   let pictureTap = UITapGestureRecognizer(target: self, action: #selector(MyInfoTableViewController.imageTapped))
       userImageView.addGestureRecognizer(pictureTap)
       userImageView.isUserInteractionEnabled = true

2 단계 다음 기능 추가

@objc func imageTapped() {

        let imageView = userImageView
        let newImageView = UIImageView(image: imageView?.image)
        newImageView.frame = UIScreen.main.bounds
        newImageView.backgroundColor = UIColor.black
        newImageView.contentMode = .scaleAspectFit
        newImageView.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
        newImageView.addGestureRecognizer(tap)
        self.view.addSubview(newImageView)

        self.navigationController?.isNavigationBarHidden = true
        self.tabBarController?.tabBar.isHidden = true

    }

테스트되고 올바르게 작동합니다


배치하는 것이 좋습니다 보이지 않는 (불투명도 = 0) 버튼 한 다음 버튼의 상호 작용을 처리하는 .

참고 URL : https://stackoverflow.com/questions/27880607/how-to-assign-an-action-for-uiimageview-object-in-swift

반응형