Как динамически установить виды с использованием JSON в Swift iOS?IOS

Программируем под IOS
Ответить
Anonymous
 Как динамически установить виды с использованием JSON в Swift iOS?

Сообщение Anonymous »

Я работаю над приложением iOS, которое необходимо динамически загружать и отображать виды из удаленного файла JSON (

Код: Выделить всё

main.json
). Этот JSON содержит координаты (, y , w , h ) и имена изображений.
У меня есть код ниже, который используется для динамического установления представлений, но я понятия не имею, как установить эти представления сначала на сказке, а затем назначить их динамически, используя код ниже:
{
            let templateDataUrl = URL(string: url!.absoluteString + "/" + "main.json")!
            
            let task = URLSession.shared.dataTask(with: templateDataUrl) { data, response, error in
                guard let data = data, error == nil else {
                    print("Error loading template data: \(error?.localizedDescription ?? "Unknown error")")
                    errorType().errorStatusBar()
                    return
                }
                do {
                    let templateData = try JSONDecoder().decode(TemplateData.self, from: data)
                    
                    DispatchQueue.main.async { [self] in
                        
                        screenwidth = bounds.size.width
                        screenheight = bounds.size.height
                        
                        let frameUrl = URL.init(string: url!.absoluteString + "/" + "frame.png" )
                        
                        if let frameUrl = frameUrl {
                            
                            SDWebImageManager.shared.loadImage(with: frameUrl, options: .highPriority, progress: nil, completed: { image, data, error, cacheType, bool, url in
                                
                                if let error = error {
                                    print("Error loading frame image: \(error.localizedDescription)")
                                    errorType().errorStatusBar()
                                } else {
                                    
                                    self.subImage.image = image
                                }
                            })
                        }
                        
                        let image = UIImage(named: "frame")
                        let imageSize = image!.size
                        
                        let width = (imageSize.width * screenwidth) / imageSize.height
                        self.scrollViewTemplate.contentSize = CGSize(width: width, height: screenwidth)
                        self.scrollSubView.frame = CGRect(origin: .zero, size: self.scrollViewTemplate.contentSize)
                        
                        for data in templateData.result
                        {
                            let xx = Double(data.x) ?? 0.0
                            let yy = Double(data.y) ?? 0.0
                            let ww = Double(data.w) ?? 0.0
                            let hh = Double(data.h) ?? 0.0
                            
                            let newX = (width * xx) / imageSize.width
                            let newY = (screenwidth * yy) / imageSize.height
                            let newW = (width * ww) / imageSize.width
                            let newH = (screenwidth * hh) / imageSize.height
                            
                            let rectt = CGRect(x: newX, y: newY, width: newW, height: newH)
                            print(rectt)
                            
                            if let image = data.image
                            {
                                let maskimage = UIImageView()
                                maskimage.sd_setImage(with: URL(string: url!.absoluteString + "/" + image)!)
                                maskimage.frame = CGRect(origin: .zero, size: rectt.size)
                                
                                maskView = UIView(frame: rectt)
                                maskView.clipsToBounds = true
                                maskView.tag = self.maskViewAry.count
                                maskView.mask = maskimage
                                scrollSubView.addSubview(maskView)
                                
                                let maskImageUrl = URL(string: url!.absoluteString + "/" + image)!
                                
                                var imageMask = UIImageView()
                                imageMask = UIImageView.init(frame: CGRect.init(origin: .zero, size: rectt.size))
                                imageMask.sd_setImage(with: maskImageUrl)
                                imageMask.tag = self.maskViewAry.count
                                imageMask.contentMode = .scaleAspectFit
                                
                                let tapGesture = UITapGestureRecognizer(target:self,action:#selector(doSomethingOnTap))
                                imageMask.isUserInteractionEnabled = true
                                imageMask.addGestureRecognizer(tapGesture)
                                maskView.addSubview(imageMask)
                                
                                imageMask.sd_setImage(with: maskImageUrl, completed: { [weak self] (image, error, cacheType, url) in
                                    guard let self = self else { return }
                                    if let loadedImage = image {
                                        self.maskImageAry.append(loadedImage)
                                        self.maskCropImageAry.append(loadedImage)
                                    } else {
                                        print("Failed to load image: \(String(describing: error))")
                                    }
                                })
                                self.maskViewAry.append(maskView)
                                self.scrollSubView.bringSubviewToFront(self.subImage)
                            }
                        }
                        
                        for (_, i) in maskViewAry.enumerated()
                        {
                            imgReplaceImg = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: 30, height: 30)))
                            imgReplaceImg.translatesAutoresizingMaskIntoConstraints = false
                            imgReplaceImg.image = UIImage(named: "replaceImg")
                            imgReplaceImg.contentMode = .scaleAspectFit
                            scrollSubView.addSubview(imgReplaceImg)
                            scrollSubView.bringSubviewToFront(imgReplaceImg)
                            
                            NSLayoutConstraint.activate([
                                imgReplaceImg.centerXAnchor.constraint(equalTo: i.centerXAnchor),
                                imgReplaceImg.centerYAnchor.constraint(equalTo: i.centerYAnchor),
                                imgReplaceImg.widthAnchor.constraint(equalToConstant: 30),
                                imgReplaceImg.heightAnchor.constraint(equalToConstant: 30)
                            ])
                            
                            imgReplaceImgs.append(imgReplaceImg)
                        }
                        
                    }
                } catch {
                    print("Error decoding template data: \(error.localizedDescription)")
                }
            }
            task.resume()
        }
< /code>
Этот код динамически загружает и рендеринг представлений от json. < /p>
Любое руководство было бы действительно оценено. Спасибо заранее!

Подробнее здесь: https://stackoverflow.com/questions/797 ... -swift-ios
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»