【问题标题】:How to display images and info using scroll view and pageController如何使用滚动视图和 pageController 显示图像和信息
【发布时间】:2018-03-08 07:07:28
【问题描述】:

我想在 UIScrollView 和 pageViewController 中显示一些图像,因为每个图像都有不同的信息,所以现在我可以做到这一点,但我想在更改图像时同时显示信息,我的意思是当我将照片更改为另一张照片时,我想显示另一张照片和有关该照片的信息,我想在代码中显示的信息是一个名为“labelList”的数组,我显示的图像名为 imageList。

class PremiosViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet var myImageView: UIImageView!
    let imagelist = ["img_1", "img_2", "img_3"]
    let labelList = ["label_1", "label_2", "label_3"]

    var scrollView = UIScrollView()

    var pageControl : UIPageControl = UIPageControl(frame:CGRect(x: 50, y: 250, width: 200, height: 50))

    var yPosition:CGFloat = 0
    var scrollViewContentSize:CGFloat=0;

    override func viewDidLoad() {
        super.viewDidLoad()

        scrollView = UIScrollView(frame: CGRect(x: 0, y: 270, width: self.view.frame.width, height: 300))
        configurePageControl()

        scrollView.delegate = self
        self.view.addSubview(scrollView)
        for  i in stride(from: 0, to: imagelist.count, by: 1) {
            var frame = CGRect.zero
            frame.origin.x = self.scrollView.frame.size.width * CGFloat(i)
            frame.origin.y = -100
            frame.size = self.scrollView.frame.size
            self.scrollView.isPagingEnabled = true

            let myImage:UIImage = UIImage(named: imagelist[i])!
            let myImageView:UIImageView = UIImageView()
            myImageView.image = myImage
            myImageView.contentMode = UIViewContentMode.scaleAspectFit
            myImageView.frame = frame

            scrollView.addSubview(myImageView)
        }

        self.scrollView.contentSize = CGSize(width: self.scrollView.frame.size.width * CGFloat(imagelist.count), height: self.scrollView.frame.size.height)
        pageControl.addTarget(self, action: Selector(("changePage:")), for: UIControlEvents.valueChanged)
        pageControl.addTarget(self, action: Selector(("changePage:")), for: UIControlEvents.valueChanged)
        // Do any additional setup after loading the view.
    }
    func configurePageControl() {
        // The total number of pages that are available is based on how many available colors we have.
        self.pageControl.numberOfPages = imagelist.count
        self.pageControl.currentPage = 0
        self.pageControl.tintColor = UIColor.clear
        self.pageControl.pageIndicatorTintColor = UIColor.clear
        self.pageControl.currentPageIndicatorTintColor = UIColor.clear
        self.view.addSubview(pageControl)

    }

    // MARK : TO CHANGE WHILE CLICKING ON PAGE CONTROL
    func changePage(sender: AnyObject) -> () {
        let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width
        scrollView.setContentOffset(CGPoint(x: x,y :0), animated: true)
    }

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

        let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
        pageControl.currentPage = Int(pageNumber)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func clickBackButton(_ sender: Any) {

        self.dismiss(animated: true, completion: nil)
    }
}

【问题讨论】:

  • 类似你在scrollview中添加一个UIImageView的方式,你不能也添加一个UILabel吗?
  • 嗯,我试过了,但我还能做到。

标签: ios swift uiscrollview uipagecontrol


【解决方案1】:

您可以使用 UICollectionView 在 UICllectionViewCell 中通过水平滚动显示图像和信息。

【讨论】:

  • 是的,我认为是这样,但在应用程序设计中并非如此,所以我必须调整代码。 :(
【解决方案2】:

如果只想在UILabel 中显示信息,那么您可以采用与添加多个UIImageView 类似的方法,也可以添加UILabel

例如在您编写的代码中:

let myImage:UIImage = UIImage(named: imagelist[i])!
let myImageView:UIImageView = UIImageView()
myImageView.image = myImage
myImageView.contentMode = UIViewContentMode.scaleAspectFit
myImageView.frame = frame

// TODO: I added this here

scrollView.addSubview(myImageView)

我在那里添加了 TODO 评论,只是为了向您展示您可以在哪里添加 UILabel 也可以这样做:

let myLabel = UILabel();
myLabel.text = labelList[i]
myLabel.textAlignment = .center
var labelFrame = CGRect(x: self.scrollView.frame.size.width * CGFloat(i), y: frame.size.height - 100, width: frame.size.width, height: 100)
myLabel.frame = labelFrame

在您的代码行scrollView.addSubview(myImageView) 下方,您还可以添加您的UILabel

scrollView.addSubview(myLabel)

【讨论】:

  • 谢谢它现在工作,我应用你的例子,它工作正常。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多