Свифт, имеющий изображение в фоновом режиме, не меняется с подпредставлением - PullRequest
0 голосов
/ 28 мая 2019

У меня есть вид, который отображает 1 изображение за раз, и это изображение должно быть фоновым изображением.У меня также есть другие элементы поверх этого изображения, которые должны меняться при прикосновении.Представление, которое у меня есть, называется VideoView , и у меня есть элементы сверху.Все это работает, моя проблема в том, что когда я использую insertSubview , все элементы сверху меняются (как они и должны), но изображение остается тем же (VideoView), и оно должно меняться.Если я заменим InsertSubView на addSubview , тогда изображение будет корректно меняться при нажатии, но мои верхние элементы не отображаются.Я знаю, что я должен использовать insertSubview , и при касании я вижу изменение URL-адреса изображения, но на экране остается первое изображение по умолчанию.

Я думаю, что язнаю, что может происходить.При каждом нажатии я добавляю новый InsertSubview, и новое изображение может быть позади старого изображения.Я подтвердил, загрузив видео.Сначала у меня было изображение, и когда я нажал, чтобы перейти к следующему экрану, изображение осталось, однако звук видео включился.

class BookViewC: UIViewController{
    @IBOutlet weak var VideoView: UIView!

    var imageView: UIImageView?



override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
  // This is how I change images, touchCount number is linked with unique image depending on the number passed in .

    for touch in touches {
        let location = touch.location(in: self.VideoView)


          if location.x <  self.VideoView.layer.frame.size.width / 2 {
            if touchCount == 0 || touchCount < 0 {
                touchCount = 0
            } else {
                touchCount = touchCount - 1

            }
           reloadTable(Offset: touchCount)
        }
        else {
            touchCount = touchCount + 1
            reloadTable(Offset: touchCount)

        }
    }
}

func ShowImage(s_image: String) {
    let imgURL: NSURL = NSURL(string: s_image)!
    let request:NSURLRequest =  NSURLRequest(url: imgURL as URL)
    let config = URLSessionConfiguration.default
    let session = URLSession(configuration: config)

    bookviewImage.imageView = UIImageView(image: UIImage(named: s_image))
    bookviewImage.imageView?.frame = VideoView.bounds
    bookviewImage.imageView?.contentMode = UIViewContentMode.scaleAspectFill


    let task = session.dataTask(with: request as URLRequest,    completionHandler: {(data, response, error) in
        DispatchQueue.main.async(execute: { () -> Void in

            if data != nil {

                self.bookviewImage.imageView?.image = UIImage(data: data!)
                self.VideoView.insertSubview(self.bookviewImage.imageView!, at: 0)
               // self.VideoView.addSubview(self.bookviewImage.imageView!)

            } else {
                self.bookviewImage.imageView!.image = nil
            }

        })
    });
    task.resume()
}





    func reloadTable(Offset: Int) {

    // send http request

        session.dataTask(with:request, completionHandler: {(data, response, error) in
            if error != nil {

            } else {
                do {

       let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]

   if let Streams = parsedData["Results"] as? [AnyObject]?
       {

     if self.streamsModel.Locations.count >= 0 {
                         // Get Results

                        }


        DispatchQueue.main.async {
          for Stream in Streams! {



if let s_image = Stream["stream_image"] as? String {                                    
self.ShowImage(s_image: s_image)

 }
     }
       }

enter image description here

Это фоновое изображение в InsertSubview не изменяется при нажатии, однако, когда я добавляю AddSubview, фоновое изображение изменяется, поэтому я знаю, что в моем коде что-то не так, поскольку фоновое изображение InsertSubview не обновляется

[! [.][2]] [2]

1 Ответ

1 голос
/ 28 мая 2019

Я не уверен, как вы меняете картинки, и, возможно, вам придется посмотреть код, чтобы дать лучшее объяснение.Тем временем вы должны понимать разницу между insertSubview и addSubview.

addSubview:

addSubview добавляет представление в конце списка,В иерархической структуре это будет самый нижний элемент.Однако на экране это будет самый верхний элемент, охватывающий все, что находится под ним.Иерархия будет выглядеть следующим образом:

  • Просмотр
    • Просмотр видео
      • Изображение профиля
      • Время
      • Полное имя
      • Сообщение
      • Кнопка
      • imageView

insertSubview:

insertSubview вставляет вид в заданную позицию в списке.Ваш код вставляется в позицию 0. В иерархической структуре это будет самый верхний элемент.На экране, однако, это будет самый нижний элемент, покрытый всем, что находится на нем.Иерархия будет выглядеть как

  • Просмотр
    • Просмотр видео
      • imageView
      • Изображение профиля
      • Время
      • Полное имя
      • Сообщение
      • Кнопка

Надеюсь, что поможет.

...