[ios] 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
텍스트를 사용하지 않고 단순히를 사용하는 것보다 a를 사용 하여 이미지를 할당 할 수도 있습니다 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")
}
답변
UITapGestureRecognizer
imageView 에 a 를 추가하고 Storyboard / xib로 드래그하고 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를 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)
사용자에게 이미지를로드하고 있다고 알리려면
답변
UITapGestureRecognizer (target : self …)의 ‘self’가 게으른 변수가 아닌 경우 탭 자체가 아니기 때문에 TapGestureRecognizer에 등록하기 위해 lazy를 추가해야합니다 . isUserInteractionEnable = true로 설정하더라도 지연 변수없이 등록되지 않습니다.
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")
}