在swift5中加载多个图像到imageslideshow



我正在使用alamofire获取数据到我的应用程序然后到tableview然后到details视图,我有两列图像在我的数据库一个名为"document"第二个名为document2;有些行在document中有图像,有些行在document2上,所以当我使用下面的代码加载图像时,它只加载一个图像

import UIKit
import Alamofire
import SwiftyJSON
import SDWebImage
import SwifterSwift
import Kingfisher
import ImageSlideshow


class DetailsViewController: UIViewController {

var data: JSON?

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var imageView2: UIImageView!
@IBOutlet weak var AdTitle: UILabel!
@IBOutlet weak var AdDetails: UITextView!
@IBOutlet weak var ContactBtn: UIButton!
@IBOutlet weak var ShareBtn: UIButton!
@IBOutlet weak var DateLabel: UILabel!
@IBOutlet weak var CityLabel: UILabel!
@IBOutlet weak var imagesSlideshowView: ImageSlideshow!



override func viewDidLoad() {
    super.viewDidLoad()
    
    if let id = Helper.getUserId() {
        ContactBtn.isHidden = false
    } else {
        ContactBtn.isHidden = true
    }
    
    AdDetails.textContainer.heightTracksTextView = true
    AdDetails.isScrollEnabled = false
    //self.navigationController?.navigationBar.semanticContentAttribute = .forceRightToLeft
    let PostTitle = data!["title"].string
    self.title = PostTitle!
                
     

    
    let imageUrl = data!["document"].string
    let url = NSURL(string:("https://site/uploads/" + imageUrl!))
    let imageUrl2 = data!["document2"].string
    let Image2url = NSURL(string:("https://site/uploads/" + imageUrl2!))
    imageView.sd_setImage(with: url as URL?, placeholderImage: UIImage(named: "placeholder.png"))
    
        
    
    CityLabel.text = data!["city"].string
    AdTitle.text = data!["title"].string
    AdDetails.text = data!["message"].string
    
    let PostTime = data!["time"].string!
    
    let startDate = PostTime
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let date = dateFormatter.date(from: startDate)
    
    let converted = date?.timeAgoDisplay()
    DateLabel.text = date?.timeAgoDisplay()
    
    let uploadsBaseUrl = "https://site/uploads/"
    var imagesSlideshowView = ImageSlideshow()
    if let image1urlString = data?["document"].string,
       let image1url = URL(string: uploadsBaseUrl + image1urlString),
       let image2urlString = data?["document2"].string,
       let image2url = URL(string: uploadsBaseUrl + image2urlString) {
        var imagesSources: [KingfisherSource] = []
        imagesSources.append(KingfisherSource(url: image1url))
        imagesSources.append(KingfisherSource(url: image2url))
        imagesSlideshowView.setImageInputs(imagesSources)
        let pageIndicator = UIPageControl()
        pageIndicator.currentPageIndicatorTintColor = UIColor.lightGray
        pageIndicator.pageIndicatorTintColor = UIColor.black
        imagesSlideshowView.pageIndicator = pageIndicator
        
    }
    

现在我添加了一个视图并安装了所需的库,

ImageSlideshow翠鸟ImageSlideshow/翠鸟ImageSlideshow/AlamofireImageSlideshow/SDWebImage静止图像不传递给视图?!

更新了代码,使其成为@denis-kozhukhov建议的幻灯片

我不清楚你想要实现什么,但会尝试用你的代码做一些事情,也许你需要这样的东西:

import UIKit
import ImageSlideshow
import ImageSlideshowKingfisher
class SomeController: UIViewController {
    let uploadsBaseUrl = "https://mysite.co/uploads/"
    var imagesSlideshowView: ImageSlideshow!
    func viewCreateFunc() {
        imagesSlideshowView = ImageSlideshow(frame: someFrame)
        self.addSubview(imagesSlideshowView)
    }
    func imagesUpdateFunc() {
        if let image1urlString = data?["document"]?.string,
           let image1url = URL(string: uploadsBaseUrl + image1urlString),
           let image2urlString = data?["document2"]?.string,
           let image2url = URL(string: uploadsBaseUrl + image2urlString) {
            var imagesSources: [KingfisherSource] = []
            imagesSources.append(KingfisherSource(url: image1url))
            imagesSources.append(KingfisherSource(url: image2url))
            imagesSlideshowView.setImageInputs(imagesSources)
            // removed html prepare code
        }
    }
}

我更新了你的代码,使它更安全,更清晰,更改命名。

我还添加了代码使用ImageSlideshow与翠鸟(我看到你使用SDWebImage,但我现在不使用它,没有选项为它做代码,但大部分是相似的)。

只管去做

pod "ImageSlideshow/SDWebImage"

运行pod install

使数据源像这样

import SDWebImage

func displayImages(){
        var imageSDWebImageSrc = [SDWebImageSource]()
        for (_,i) in (newsModel?.banners ?? [Banner]()).enumerated() {
            let image = SDWebImageSource(urlString: i.image ?? "")
            if let sdURL = image{
                imageSDWebImageSrc.append(sdURL)
            }
        }
        imageSlider.reloadInputViews()
    }

最新更新