Как установить метку для массива изображений в Swift/Xcode
Я пытаюсь установить прослушиватели касаний для каждого просмотра изображений из массива изображений и печатать, когда он выбран. В идеале, я бы хотел, чтобы каждое изображение просматривалось на слушателе - например, "было выбрано изображение 2". Спасибо!
class ViewController2: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
var index: Int = 0
var images: [UIImage] = [UIImage(named: "image1.png")!, UIImage(named: "image2.png")!, UIImage(named: "image3.png")!, UIImage(named: "image4.png")!, UIImage(named: "image5.png")!, UIImage(named: "image6.png")!, UIImage(named: "image7.png")!, UIImage(named: "image8.png")!, UIImage(named: "image9.png")!, UIImage(named: "image10.png")!, UIImage(named: "image11.png")!, UIImage(named: "image12.png")!, UIImage(named: "image13.png")!, UIImage(named: "image14.png")!, UIImage(named: "image15.png")!, UIImage(named: "image16.png")!, UIImage(named: "image17.png")!, UIImage(named: "image18.png")!, UIImage(named: "image19.png")!, UIImage(named: "image20.png")!, UIImage(named: "image21.png")!, UIImage(named: "image22.png")!, UIImage(named: "image23.png")!, UIImage(named: "image24.png")!, UIImage(named: "image25.png")!, UIImage(named: "image26.png")!, UIImage(named: "image27.png")!, UIImage(named: "image28.png")!, UIImage(named: "image29.png")!, UIImage(named: "image30.png")!]
var imageView: [UIImageView] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
//let screenHeight = screenSize.height
let numWidth: CGFloat = 3
let numHeight: CGFloat = 10
self.scrollView.frame.size.width = screenWidth
let width: CGFloat = (self.scrollView.frame.size.width - (numWidth + 1))/3
var tap = UITapGestureRecognizer(target: self, action: Selector("tappedMe"))
for var i:CGFloat = 0; i < 3; ++i{
for var j:CGFloat = 0; j < 10; ++j {
let image: UIImage = images[index]
imageView.append(UIImageView(image: image))
imageView[index].frame = CGRectMake(width*i, width*j, width, width)
self.scrollView.addSubview(imageView[index])
imageView[index].addGestureRecognizer(tap)
imageView[index].userInteractionEnabled = true
index++
}
}
scrollView.contentSize.height = (width)*numHeight
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func imageTapped(img: AnyObject)
{
// Your action
print("tapped")
}
}
1 ответ
Решение
Вы должны использовать пользовательский класс вместо хранения массива UIImageView.
import UIKit
class MyCustomImageView : UIImageView{
var myId : String = "";
override init(frame: CGRect){
super.init(frame: frame);
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
println("IM TOUCHED\(myId)");
}
}
,,,
var imageView: [MyCustomImageView] = []
и в вашем цикле:
for var i:CGFloat = 0; i < 3; ++i{
for var j:CGFloat = 0; j < 10; ++j {
let image: UIImage = images[index]
imageView.append(MyCustomImageView(frame: CGRectMake(width*i, width*j, width, width)))
imageView[index].image = image;
self.scrollView.addSubview(imageView[index])
imageView[index].myId = "Image number \(index)";
index++
}
}
и, кстати, не знаю, что вы пытаетесь сделать со всей шириной высоты, но это немного более понятный способ:
class ViewController2: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
let imageIndex : (begin:Int,end:Int) = (begin:1,end:30);
var imageView: [MyCustomImageView] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
//let screenHeight = screenSize.height
let numWidth: CGFloat = 3
let numHeight: CGFloat = 10
self.scrollView.frame.size.width = screenWidth
let width: CGFloat = (self.scrollView.frame.size.width - (numWidth + 1))/3
var index = self.imageIndex.begin;
for var i:CGFloat = 0; i < 3; ++i{
for var j:CGFloat = 0; j < 10; ++j {
let image: UIImage? = UIImage(named: "image\(index++).png");
var currentImageView = MyCustomImageView(frame: CGRectMake(width*i, width*j, width, width))
currentImageView.image = image;
currentImageView.userInteractionEnabled = true
currentImageView.myId = "image\(index++).png";
self.scrollView.addSubview(imageView[index])
imageView.append(currentImageView);
}
}
scrollView.contentSize.height = (width)*numHeight
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}