Nic*_*los 3 tags uigesturerecognizer ios swift
tl;dr: 我应该如何设置我的标签,以便可以使用手势识别器检索它们?
我正在设置一个视图,用户可以在其中按下按钮时生成多个 UIImageViews。图像创建过程是:
var siegeView: UIView!
var round1: UIImageView!
var setTag : Int!
var tagCounter = 0
@IBAction func showContent(sender: AnyObject) {
round1 = UIImageView(frame: CGRectMake(0, 0, 100, 100))
round1.image = UIImage(named: nomDuRond.text)
setTag = tagCounter
tagCounter++
self.rond1.tag = setTag
var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
label.center = CGPointMake(round1.frame.origin.x+50, round1.frame.origin.y+100)
label.textAlignment = NSTextAlignment.Center
label.text = nomDuRond.text
siegeView = UIView(frame: CGRectMake(round1.frame.origin.x, round1.frame.origin.y, round1.frame.size.width, round1.frame.size.height))
round1.userInteractionEnabled = true
siegeView.addSubview(rond1)
siegeView.addSubview(label)
view.addSubview(siegeView)
let recognizer = UIPanGestureRecognizer(target: self, action:Selector("handlePan:"))
recognizer.delegate = ClassSiege()
siegeView.addGestureRecognizer(recognizer)
Run Code Online (Sandbox Code Playgroud)
然后用户可以使用下面的手势识别器的函数“handlePan”移动创建的图像:
func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translationInView(self.view)
self.view.bringSubviewToFront(recognizer.view!)
recognizer.view!.center = CGPoint(x:recognizer.view!.center.x + translation.x,
y:recognizer.view!.center.y + translation.y)
recognizer.setTranslation(CGPointZero, inView: self.view)
var centerBoardX = BlackBoard.center.x
var centerBoardY = BlackBoard.center.y
var centerRondX = round1.superview?.center.x
var centerRondY = round1.superview?.center.y
var switchRang = premierRang
DistanceCenterY.text = " \(centerRondY! - centerBoardY)"
if centerRondY! - centerBoardY < 100 {
switchRang.setOn(true, animated: true)
println("dans switch if")
} else {
switchRang.setOn(false, animated: true)
println("dans switch else")
}
}
Run Code Online (Sandbox Code Playgroud)
目前,我的目标是能够获取 DistanceCenterY 信息,以及对用户移动的每个视图激活 if 操作。但它仅适用于创建的最后一个视图。我的猜测是,如果我指定图像的标签,它就可以工作。但是我不知道如何检索用户当前正在移动的图像的标签。
我在这里尝试了这个解决方案,但它不是图像的标签,因为即使标签不同,它也总是返回 0。
所以,我的问题是:我应该如何设置我的标签,以便可以使用手势识别器检索它们?
我深深地被困在这里,所以任何帮助将不胜感激!谢谢
更新 1 : 多亏了 Rdelmar,我才得以前进……但不会太远!
我更新了创建图像的方式,并修改了 Gesture Recognizer 函数以使用标签信息来获取所选图像的信息。
代码是:
var siegeView: UIView! var rond1:UIImageView!var rond2:UIImageView!var setTag : 整数!var tagCounter = 1 var tagInfo = 0
func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translationInView(self.view)
recognizer.view!.center = CGPoint(x:recognizer.view!.center.x + translation.x,
y:recognizer.view!.center.y + translation.y)
recognizer.setTranslation(CGPointZero, inView: self.view)
var switchRang = premierRang
//Here I'm getting the tag from the recognizer.
var tag = recognizer.view?.tag
tagInfo = tag!
var centerBoardX = BlackBoard.center.x
var centerBoardY = BlackBoard.center.y
//to get the coordinates of the image, i'm getting the info using the tag I got earlier.
var centerRondX = rond1.viewWithTag(tagInfo)!.center.x
var centerRondY = rond1.viewWithTag(tagInfo)!.center.y
DistanceCenterY.text = " \(centerRondY - centerBoardY)"
if centerRondY - centerBoardY < 100 {
switchRang.setOn(true, animated: true)
println("dans switch if")
} else {
switchRang.setOn(false, animated: true)
println("dans switch else")
}
}
Run Code Online (Sandbox Code Playgroud)
和 showcontent 功能更新:
@IBAction func showContent(sender: AnyObject) {
rond1 = UIImageView(frame: CGRectMake(0, 0, 100, 100))
rond1.image = UIImage(named: nomDuRond.text)
setTag = tagCounter
tagCounter++
rond1.tag = setTag
var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
label.center = CGPointMake(rond1.frame.origin.x+50, rond1.frame.origin.y+100)
label.textAlignment = NSTextAlignment.Center
label.text = nomDuRond.text
rond1.userInteractionEnabled = true
view.addSubview(rond1)
//the label subview was getting me some bugs, so for now I removed it.
//view.addSubview(label)
let recognizer = UIPanGestureRecognizer(target: self, action:Selector("handlePan:"))
recognizer.delegate = ClassSiege()
rond1.addGestureRecognizer(recognizer)
Run Code Online (Sandbox Code Playgroud)
移动图像时返回的标签是正确的,但是当我添加第二个图像并移动第一个图像时,我收到一个致命错误,因为该行返回了 nil var centerRondY = rond1.viewWithTag(tagInfo)!.center.y
我仍然被卡住,因为我找不到问题所在。我不清楚识别器是如何工作的。如果你有一些线索,它仍然非常非常感激。谢谢 !
我认为这段代码可以满足您的需求。我注释掉了一些东西,因为我不知道它是什么,我硬编码了标签中的图像和文本。正如我在评论中所说,您不需要使用标签,因为每个识别器都知道自己的视图。我注释掉了按钮的东西,但是当我在屏幕上上下移动视图时,我确实看到“if”和“else”日志语句被触发,
class ViewController: UIViewController {
@IBAction func showContent(sender: AnyObject) {
var rond1 = UIImageView(frame: CGRectMake(0, 0, 100, 100))
rond1.image = UIImage(named:"Lofoten.jpg")
var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
label.center = CGPointMake(rond1.frame.origin.x+50, rond1.frame.origin.y+100)
label.textAlignment = NSTextAlignment.Center
label.text = "Picture"
label.textColor = UIColor.whiteColor()
label.frame = CGRectMake(0, rond1.frame.size.height - 25, 100, 25)
rond1.addSubview(label)
rond1.userInteractionEnabled = true
view.addSubview(rond1)
let recognizer = UIPanGestureRecognizer(target: self, action:Selector("handlePan:"))
rond1.addGestureRecognizer(recognizer)
}
func handlePan(recognizer:UIPanGestureRecognizer) {
let iv = recognizer.view
let translation = recognizer.translationInView(self.view)
iv.center.x += translation.x
iv.center.y += translation.y
recognizer.setTranslation(CGPointZero, inView: self.view)
// var switchRang = premierRang
var centerBoardY = self.view.center.y
var centerRondY = iv.center.y
//DistanceCenterY.text = " \(centerRondY - centerBoardY)"
if centerRondY - centerBoardY < 100 {
//switchRang.setOn(true, animated: true)
println("dans switch if")
} else {
//switchRang.setOn(false, animated: true)
println("dans switch else")
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9905 次 |
| 最近记录: |