以编程方式创建Label,在ScrollView上的每个场景上显示Slider值

时间:2016-11-24 22:18:59

标签: ios xcode uiscrollview swift3

我对swift的编程世界有点新意。 香港专业教育学院开始练习,我目前正在开发一个演示应用程序,只是为了探索..

现在,应用程序假设要做的是显示滚动视图,每个屏幕显示一个不同的"动物"或图像,标签和图标的任何其他主题,侧面是一个带有1-5个值的滑块,用于显示您对...的喜爱程度。该科目的比例为1至5。

除了我似乎无法在滑块上方的每个屏幕上添加标签以显示其当前值之外,一切正常。

使用当前代码显示每个屏幕及其相应的图像/标签/图标,在页面指示器上显示正确的页面,并显示工作滑块,  仅在最后一帧上,Slider具有连接到其值的Label。 似乎无法弄清楚

希望它足够清楚,非常感谢。

(P.S我完全清楚,我可能首先完全错误地做了这件事,让我欢迎它)

class ViewController: UIViewController, UIScrollViewDelegate {


    public var sliderLbl = UILabel() 
    @IBOutlet var mainScrollView: UIScrollView!   
    @IBOutlet var secondScrollView: UIScrollView!
    var imageArray = [UIImage]()
    var iconImg = [UIImage]()
    var pageControl : UIPageControl = UIPageControl(frame: CGRect(x: 160, y: 420, width: 50, height: 100))
    var subjects:[String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        mainScrollView.delegate = self
        mainScrollView.frame = view.frame
        imageArray = [pic1.png, pic2.png, pic3.png, pic4.png, pic5.png]
        subjects = ["Dog", "Cat", "Mouse", "Cow", "Snake"]
        iconImg = [icon1.png, icon2.png, icon3.png, icon4.png]

        for i in 0..<imageArray.count{
            let labelView = UILabel()
            let imageView = UIImageView()
            let subjIcon = UIImageView()
            let oneSlider = UISlider()
            let sliderLabel = sliderLbl
                sliderLabel.textColor = UIColor.black
            oneSlider.transform = CGAffineTransform(rotationAngle: CGFloat(-M_PI_2))
            oneSlider.minimumValue = 1
            oneSlider.maximumValue = 5
            oneSlider.isUserInteractionEnabled = true
            oneSlider.value = 1
            oneSlider.tintColor = UIColor.darkGray
            oneSlider.isContinuous = true
            sliderLabel.text = "1"
            labelView.text = subjects[i]
            labelView.textColor = UIColor.darkGray
            labelView.textAlignment = .center
            imageView.alpha = 0.85
            imageView.image = imageArray[i]
            imageView.contentMode = .center
            subjIcon.image = iconImg[i]
            subjIcon.contentMode = .scaleAspectFit
            let xPosition = self.view.frame.width * CGFloat(i)
            imageView.frame = CGRect(x: xPosition, y: -50, width: self.mainScrollView.frame.width, height: self.mainScrollView.frame.height)
            labelView.frame = CGRect(x: xPosition, y: -250, width: self.mainScrollView.frame.width, height: self.mainScrollView.frame.height)
            iconImg.frame = CGRect(x: xPosition, y: 500, width: self.mainScrollView.frame.width, height: 150)
             oneSlider.frame = CGRect(x: xPosition, y: 250, width: 50, height: 130)
            sliderLabel.frame = CGRect(x: xPosition+20, y: 180, width: self.mainScrollView.frame.width, height: 80)
            mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1)
                       // Add subViews

            mainScrollView.addSubview(subjIcon)
            mainScrollView.addSubview(imageView)
            mainScrollView.addSubview(labelView)
            mainScrollView.bringSubview(toFront: subjIcon)


            oneSlider.addTarget(self, action: #selector(sliderSlid(_:)) ,for: UIControlEvents.valueChanged)



            mainScrollView.addSubview(sliderLabel)
            mainScrollView.addSubview(oneSlider)

       func configurePageControl() {
            self.pageControl.numberOfPages = imageArray.count
            self.pageControl.currentPage = 0
            self.pageControl.tintColor = UIColor.red
            self.pageControl.pageIndicatorTintColor = UIColor.lightGray
            self.pageControl.currentPageIndicatorTintColor = UIColor.green
            self.view.addSubview(pageControl)
        }
        configurePageControl()


        }

    }

    func sliderSlid(_ sender: UISlider) {

        sliderLbl.text = String(Int(roundf(sender.value)))

    }


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

}

0 个答案:

没有答案