source

Swift에서 UIImageView 개체에 대한 작업을 할당하는 방법

manycodes 2023. 4. 11. 22:13
반응형

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)
}

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

    // Your action
}

(또한UIButton텍스트 없이 단순히 연결만 하는 것이 아니라 이미지를 지정합니다.IBAction)

제스처 인식기를 다음에 추가해야 합니다(탭의 경우 UITAPGestureRecognizer를 사용하고, 탭 및 유지의 경우 UELongPressGestureRecognizer를 사용합니다).UIImageView.

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

그리고 다음과 같은 셀렉터 방식을 구현합니다.

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

를 추가할 수 있습니다.UITapGestureRecognizerimageView에 1개만 드래그하면 Storyboard/xib에 삽입할 수 있습니다.또한 Ctrl+Drag를 사용하여 imageView에서 gestureRecognizer로, Ctrl+Drag을 사용하여 gestureRecognizer에서Swift 파일로 드래그하면,IBAction.

또, 유저의 조작을 유효하게 할 필요가 있습니다.UIImageView(다음 이미지와 같이)여기에 이미지 설명 입력

Swift의 경우:

@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.isUserInteractionEnabled = true
}

func tappedMe() {
    print("Tapped on Image")
}

Swift4 코드

몇 가지 새로운 확장 방법을 사용해 보십시오.

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에 대해서UIView또는UIView같은 서브클래스UIImageView셀렉터에 관련된 함수를 만들지 않아도 됩니다.

사용방법:

 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)

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

TapGestureRecognizer를 등록하려면 지연을 추가해야 합니다.
UITapGestureRecognizer(타겟: self...)의 'self'는 게으른 var가 아니면 0이 되므로.isUserInteractionEnable = true를 설정해도 lazy var가 없으면 등록되지 않습니다.

lazy var imageSelector : UIImageView = {
    let image = UIImageView(image: "imageName.png")
    //now add tap gesture
    image.isUserInteractionEnabled = true
    image.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleImageSelector)))
    return image
}()
@objc private func handleImageSelector() {
    print("Pressed image selector")
}

를 넣을 수 있습니다.UIButton위에 투명한 배경을 두고UIImageView이미지를 로드하기 전에 버튼을 탭하는 소리가 들립니다.

@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
//ViewController is your current view controller    
let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tappedMe))
    imageView.addGestureRecognizer(tap)
    imageView.isUserInteractionEnabled = true
}

// Need to ass objective-c annotation 
@objc
func tappedMe() {
    print("Tapped on Image")
}

Swift 4 코드


순서 1 ViewdidLoad()에서의

   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) 버튼을 배치한 후 버튼에서 상호 작용을 처리하는 것이 좋습니다.

이게 내가 찾은 거야 셋업이 훨씬 쉬워

여기 유튜브 영상이 있습니다.

  1. 라이브러리를 열고 "Tap Gesture Recognizer" 객체를 찾습니다.
  2. 오브젝트를 스토리보드로 드래그하고 액션을 트리거할 이미지에 위임자를 설정합니다.
  3. 그런 다음 뷰 컨트롤러로 이동하여 동일한 개체를 끌어 IBAtion을 설정합니다.

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

반응형