如何在swift或objective-c中为文本更改设置动画?

时间:2016-04-08 10:34:51

标签: objective-c swift animation catransition

我尝试了一个测试项目。它工作,但我使用的方法,以编程方式创建标签在旧的现有标签上。当字符串数组的长度低于旧数组时,由于addSubview方法,它会显示不必要的旧标签。 我该如何处理这个问题?

import UIKit

extension UIView {
    func pushTransition(duration:CFTimeInterval) {
        let animation:CATransition = CATransition()
        animation.timingFunction = CAMediaTimingFunction(name:
            kCAMediaTimingFunctionEaseInEaseOut)
        animation.type = kCATransitionPush
        animation.subtype = kCATransitionFromBottom
        animation.duration = duration
        self.layer.addAnimation(animation, forKey: kCATransitionPush)
    }
}

class ViewController: UIViewController {

    var current:Float = 125.24
    var discount:Float = 1.212342748

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

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func doAction(sender: AnyObject) {

    let currentstr = String(format: "₺%.2f", self.current)
    let length = currentstr.characters.count
    var strarray = Array(currentstr.characters)
    strarray[length-3] = ","
    print(strarray)
    self.current = self.current-self.discount
    let newcurrent = String(format: "₺%.2f", self.current)
    let newcurrentlength = newcurrent.characters.count
    var newcurrentarray = Array(newcurrent.characters)
    newcurrentarray[newcurrentlength-3] = ","
    print(newcurrentarray)
    var labels = [UILabel]()
    print(labels)
    if (length == newcurrentlength) {
        for i in 1 ..< length+1 {
            labels.append(UILabel(frame: CGRectMake((15*CGFloat(i)), 100, 20, 20)))
            if (strarray[i-1] == newcurrentarray[i-1]){
                print("SAME")
                labels[i-1].text = String(newcurrentarray[i-1])
                labels[i-1].textAlignment = NSTextAlignment.Center
                labels[i-1].backgroundColor = UIColor.redColor()
                self.view.addSubview(labels[i-1])

            } else {
                print("CHANGED")
                labels[i-1].pushTransition(0.4)
                labels[i-1].text = String(newcurrentarray[i-1])
                labels[i-1].textAlignment = NSTextAlignment.Center
                labels[i-1].backgroundColor = UIColor.redColor()
                self.view.addSubview(labels[i-1])
            }
        }
    } else {
        for i in 1..<newcurrentlength+1 {
            labels.append(UILabel(frame: CGRectMake((15*CGFloat(i)), 100, 20, 20)))
            if (strarray[i-1] == newcurrentarray[i-1]){
                print("SAME")
                labels[i-1].text = String(newcurrentarray[i-1])
                labels[i-1].textAlignment = NSTextAlignment.Center
                labels[i-1].backgroundColor = UIColor.redColor()
                self.view.addSubview(labels[i-1])
            } else {
                print("CHANGED")
                labels[i-1].pushTransition(0.4)
                labels[i-1].text = String(newcurrentarray[i-1])
                labels[i-1].textAlignment = NSTextAlignment.Center
                labels[i-1].backgroundColor = UIColor.redColor()
                self.view.addSubview(labels[i-1])
            }
        }
    }
}
}

修改

我把标签数组放在行动部分之外并且已修复。

        var labels = [UILabel]()

但是,100,00和99,99之间的转换是标签数组的最后一个子节点出现问题。它仍显示最后一位数字,如99,990

enter image description here

enter image description here

0 个答案:

没有答案