【问题标题】:Swift having image in background not changing with subviewSwift在背景中具有图像不随子视图而改变
【发布时间】:2019-10-13 12:56:03
【问题描述】:

我有一个一次显示 1 张图片的视图,该图片应该是背景图片。我在该图像之上还有其他元素应该在触摸时改变。我拥有的视图称为 VideoView 并且我在 top 上有元素。所有这些都有效,我的问题是,当我使用 insertSubview 时,顶部的所有元素都会发生变化(就像它们应该发生的那样),但图像保持不变(VideoView)并且应该发生变化。如果我用 addSubview 替换 InsertSubView 则图像在点击时会正确更改,但我的顶部元素不显示。我知道我应该使用的是 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)

 }
     }
       }

InsertSubview 上的此背景图像在单击时不会更改,但是当我添加 AddSubview 时,背景图像会发生变化,所以我知道我的代码有问题,因为 InsertSubview 背景图像没有更新

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

【问题讨论】:

    标签: ios swift uiimageview swift4 addsubview


    【解决方案1】:

    我不确定您是如何更改图片的,可能需要查看代码才能提供更好的解释。同时,您应该了解insertSubviewaddSubview之间的区别。

    添加子视图:

    addSubview 在列表末尾添加一个视图。在层次结构中,这将是最底层的项目。然而,在屏幕上,它将是覆盖其下方所有内容的最顶部的项目。 层次结构看起来像

    • 查看
      • 视频查看
        • 个人资料图片
        • 时间
        • 全名
        • 发布
        • 按钮
        • 图像视图

    插入子视图:

    insertSubview 在列表中的给定位置插入视图。您的代码在位置 0 处插入。在层次结构中,这将是最顶层的项目。然而,在屏幕上,它将是最底部的项目,上面的所有内容都覆盖了它。 层次结构看起来像

    • 查看
      • 视频查看
        • 图像视图
        • 个人资料图片
        • 时间
        • 全名
        • 发布
        • 按钮

    希望对您有所帮助。

    【讨论】:

    • 感谢这绝对有帮助,这就是为什么当我将 InsertSubview 设置为 1 时它隐藏了 Profile Image 。我是 swift 新手。
    • @user1591668 很高兴能为您提供帮助。如果问题得到解决,请接受答案。如果还有什么困惑,请告诉我
    • 我肯定更接近解决我的问题。我创建了一个更详细的帖子。本质上,我的 InsertSubview 图像应该在点击时发生变化,即使其他一切都在点击时发生变化,它也不会发生。
    • 那行得通,我只是在 ViewDidLoad 中创建了图像,然后调用 InsertSubview,而不是每次都创建一个新图像。
    猜你喜欢
    • 2016-04-22
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多