Есть ли более простой способ просмотра UIImageView программно? - PullRequest
0 голосов
/ 05 ноября 2018

У меня 8 кнопок, и я хочу отображать изображение при каждом нажатии кнопок.

Что мне интересно, мне нужно 8 функций для отображения этих изображений? Или есть более простые способы?

Вот как я это сделал, все работает как надо, но я не хочу повторять одно и то же снова и снова?

var imageView1:UIImageView!
var imageView2:UIImageView!
var imageView3:UIImageView!

    override func viewDidLoad() {
    super.viewDidLoad()
    showImage1()
    showImage2()
    showImage3()
    tapGestureRecognizerFunc()

  }

 @objc func button1Tap() {
    if self.imageView1.isHidden {
       self.imageView1.isHidden = false            
    }else{
       self.imageView1.isHidden = true
    }
}
@objc func button2Tap() {
    if self.imageView2.isHidden {
       self.imageView2.isHidden = false            
    }else{
       self.imageView2.isHidden = true
    }

}
@objc func button3Tap() {
    if self.imageView3.isHidden {
       self.imageView3.isHidden = false            
    }else{
       self.imageView3.isHidden = true
    }

}
func showImage1() {
    imageView1 = UIImageView(frame: CGRect(x: 271, y: 8, width: 29, height: 29))
    imageView1.image = UIImage(named: "Done.png")
    imageView1.contentMode = .scaleAspectFit
    View1.addSubview(imageView1)
    imageView1.isHidden = true
}
func showImage2() {
    imageView2 = UIImageView(frame: CGRect(x: 271, y: 8, width: 29, height: 29))
    imageView2.image = UIImage(named: "Done.png")
    imageView2.contentMode = .scaleAspectFit
    View2.addSubview(imageView2)
    imageView2.isHidden = true
}
func showImage3() {
    imageView2 = UIImageView(frame: CGRect(x: 271, y: 8, width: 29, height: 29))
    imageView2.image = UIImage(named: "Done.png")
    imageView2.contentMode = .scaleAspectFit
    View3.addSubview(imageView2)
    imageView2.isHidden = true
}
func tapGestureRecognizerFunc () {        
    let exercise1Tap = UITapGestureRecognizer(target: self, action: #selector(button1Tap))
    exercise1Tap.numberOfTapsRequired = 2
    View1.addGestureRecognizer(exercise1Tap)

    let exercise2Tap = UITapGestureRecognizer(target: self, action: #selector(button2Tap))
    exercise2Tap.numberOfTapsRequired = 2
    View2.addGestureRecognizer(exercise2Tap)

    let exercise3Tap = UITapGestureRecognizer(target: self, action: #selector(button3Tap))
    exercise3Tap.numberOfTapsRequired = 2
    View3.addGestureRecognizer(exercise3Tap)

}

да, я новичок

1 Ответ

0 голосов
/ 05 ноября 2018

Так как я не знаю, где и как вы создаете Кнопки, трудно ответить. Ниже приведен лишь совет.

  1. Вы должны использовать массив UIImageView
  2. Ваш обратный вызов должен использовать форму ButtonAction (отправитель: UIButton)
  3. Вы можете использовать тег для кнопки, чтобы получить номер соответствующей кнопки

Например:

класс ViewController: UIViewController {

var imageviews : [UIImageView] = []
override func viewDidLoad() {
    super.viewDidLoad()

    for i in 1...8 {
        let imageview = UIImageView()
        view.addSubview(imageview)
        imageview.tag = i
        imageviews.append(imageview)
        let button = UIButton(frame: CGRect(x: 0, y: CGFloat(i)*50.0, width: 100, height: 30))
        view.addSubview(button)
        button.setTitle("Button \(i)", for: .normal)
        button.setTitleColor(.black, for: .normal)
        button.tag = i
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    }
}

@objc func buttonAction(sender : UIButton) {
    let index = sender.tag
    print("Button \(index) pressed")

    imageviews[index].isHidden = !imageviews[index].isHidden
}

}

...