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")
}
UITapGestureRecognizer
imageView 에 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 를 추가하려고 할 때마다 셀렉터를위한 관련 함수를 만들지 않고도 그렇게 할 수 있습니다!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)
사용자에게 이미지를로드하고 있다고 알리려면
당신은 넣을 수 있습니다 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
'IT story' 카테고리의 다른 글
데이터 프레임 목록을 만들려면 어떻게합니까? (0) | 2020.05.27 |
---|---|
응용 프로그램에 대한 실행 권한을 변경할 수 없습니다 (0) | 2020.05.27 |
프로세스 ID (PID)가 있는지 확인하는 방법 (0) | 2020.05.27 |
Observable.of는 함수가 아닙니다 (0) | 2020.05.27 |
Django 템플릿에서 사전 요소에 액세스하는 방법은 무엇입니까? (0) | 2020.05.27 |