Search code examples
iosswiftuislider

IOS 6 to Swift2 update Slider


any chance someone to help me in this code?
it is a Slider that changes the size of the Fonts in a Label. this worked in IOS6 but I am trying to run on Swift 2.
Thanks in advance.

import UIKit

class ViewController: UIViewController {

    @IBAction func defaultSlider1(sender: UISlider) {

        UISlider *slide = (UISlider *)sender;
        int fonts = (int)(slide.value);
        NSString *newtext = NSlog("%d", fonts);
        label.font = [UIFont systemFontOfSize:fonts];
        label.text = newtext;

    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

Solution

  • Please try following example (Demo):

    import UIKit
    
    class ViewController: UIViewController {
    
    
        private var slider: UISlider!
        private var label: UILabel!
    
        private let minimumFontSize: Float = 16
        private let maximumFontSize: Float = 48
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let width: CGFloat  = view.bounds.width / 2
            let height: CGFloat = 44.0
    
            let size    = CGSize(width: width, height: height)
            let origin  = CGPoint(x: self.view.center.x - (width / 2), y: self.view.center.y)
    
            createSlider(origin, size: size)
            createLabel(origin, size: size)
            sliderAction()
        }
    
        func createSlider(origin: CGPoint, size: CGSize) {
    
            let frame = CGRect(origin: origin, size: size)
    
            self.slider = UISlider(frame: frame)
            self.slider.addTarget(self,
                action: Selector("sliderAction"),
                forControlEvents: UIControlEvents.ValueChanged)
    
            self.slider.minimumValue = minimumFontSize
            self.slider.maximumValue = maximumFontSize
    
            view.addSubview(self.slider)
        }
    
        func createLabel(origin: CGPoint, size: CGSize) {
            let labelOrigin = CGPoint(x: origin.x, y: origin.y + size.height)
            let frame = CGRect(origin: labelOrigin, size: size)
    
            self.label = UILabel(frame: frame)
            self.label.textAlignment = NSTextAlignment.Center
    
            view.addSubview(self.label)
        }
    
        func sliderAction() {
            let fontSize = CGFloat(self.slider.value)
    
            self.label.font = UIFont.systemFontOfSize(fontSize)
            self.label.text = "\(Int(fontSize))"
        }
    
    }
    

    In case you're using Storyboards:

    • Add UISlider and UILabel to your View Controller Scene on the Storyboard
    • Insert @IBOutlets for each control (Ctrl+Drag from the control on the Storyboard to code, choose Outlet from Connection list)
    • Insert @IBAction for slider's Value Changed event (Ctrl+Drag from the slider control on the Storyboard to code, choose Action from Connection list)

    You may end up with something like:

    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var slider: UISlider!
        @IBOutlet weak var label: UILabel!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.slider.minimumValue = 16
            self.slider.maximumValue = 48
    
            self.sliderAction()
        }
    
        @IBAction func sliderValueChangedAction(sender: UISlider) {
            self.sliderAction()
        }
    
        private func sliderAction() {
            let fontSize = CGFloat(self.slider.value)
    
            self.label.font = UIFont.systemFontOfSize(fontSize)
            self.label.text = "\(Int(fontSize))"
        }
    
    }