use*_*773 175 uiimageview ios swift
UIImageView当用户点击它时,我正在尝试分配一个动作.
我知道如何为a创建一个动作UIButton,但我怎么能模仿a的相同行为UIButton,但是使用UIImageView?
Ase*_*der 388
你需要一个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
}
Run Code Online (Sandbox Code Playgroud)
(您也可以使用UIButton并为其分配图像,没有文本,只需连接IBAction)
Mid*_* MP 63
您需要添加一个手势识别器(用于点击使用UITapGestureRecognizer,用于点击并按住使用UILongPressGestureRecognizer)UIImageView.
let tap = UITapGestureRecognizer(target: self, action: #selector(YourClass.tappedMe))
imageView.addGestureRecognizer(tap)
imageView.isUserInteractionEnabled = true
Run Code Online (Sandbox Code Playgroud)
并实现选择器方法,如:
@objc func tappedMe()
{
println("Tapped on Image")
}
Run Code Online (Sandbox Code Playgroud)
Emi*_*mil 34
你可以添加一个UITapGestureRecognizer到imageView,只需将一个拖到Storyboard/xib中,按住Ctrl键从imageView拖动到gestureRecognizer,然后按Ctrl-拖动从gestureRecognizer到Swift文件来制作一个IBAction.
您还需要在其上启用用户交互UIImageView,如下图所示:

Abh*_*mar 13
对于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")
}
Run Code Online (Sandbox Code Playgroud)
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")
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,每当我们想将添加UITapGestureRecognizer到UIView或UIView子类一样UIImageView,我们可以这样做而无需选择创建相关的功能!
用法:
profile_ImageView.addTapGestureRecognizer {
print("image tapped")
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可以将图像设置为UIButton通常放入的图像UIImageView.例如,你会做什么:
myImageView.image = myUIImage
Run Code Online (Sandbox Code Playgroud)
你可以改用:
myButton.setImage(myUIImage, forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)
那么,这就是你的代码的样子:
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
}
Run Code Online (Sandbox Code Playgroud)
使用此方法的好处是,如果必须从数据库加载图像,可以在设置图像之前设置按钮的标题:
myButton.setTitle("Loading Image...", forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)
告诉您的用户您正在加载图片
需要为 TapGestureRecognizer 添加惰性注册
,因为 UITapGestureRecognizer(target: self ...) 中的“self”如果不是惰性变量,则将为 nil。即使您设置 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")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135592 次 |
| 最近记录: |