跑马灯动画点击事件

来源:互联网 发布:vb打开资源管理器 编辑:程序博客网 时间:2024/05/16 01:19

代码块

////  SNMarqueeView.swift//  Futianwisdom////  Created by Snow on 16/5/23.//  Copyright (c) 2016年 futianwisdom. All rights reserved.//import UIKitimport SwiftyJSONprotocol SNMarqueeViewDelegate {    func didSelectURL(url: String)}class SNMarqueeView: UIView {    var delegate: SNMarqueeViewDelegate?    private var marqueeTitle = ""    private var titleArray = [String]()    private var urlArray = [String]()    private var mark:CGRect!    private var lastLabelFrame = CGRectZero    private var labArr = [UILabel]()    private var isStop = false    private var timeInterval1: NSTimeInterval!    convenience init(frame: CGRect, json: [JSON]) {        self.init(frame: frame)        for obj in json {            marqueeTitle += obj["title"].stringValue            titleArray.append(obj["title"].stringValue)            urlArray.append(obj["link"].stringValue)        }        self.backgroundColor = UIColor.whiteColor()        self.clipsToBounds = true        let tapGesture = UITapGestureRecognizer(target: self, action: "tapClick:")        self.addGestureRecognizer(tapGesture)        timeInterval1 = NSTimeInterval(marqueeTitle.characters.count/2)        for _ in 0...1 {            for title in titleArray {                let lab = UILabel()                lab.frame = CGRectZero                lab.textColor = UIColor.grayColor()                lab.font = UIFont.boldSystemFontOfSize(14.0)                lab.text = title                lab.userInteractionEnabled = false                //计算textLab的大小                let sizeOfText = lab.sizeThatFits(CGSizeZero)                lab.frame = CGRectMake(                    lastLabelFrame.origin.x + lastLabelFrame.size.width ,                    0,                    sizeOfText.width,                    self.bounds.size.height)                lastLabelFrame = lab.frame                self.addSubview(lab)                labArr.append(lab)            }        }        mark = CGRectMake(0,0,            lastLabelFrame.origin.x + lastLabelFrame.size.width,            self.bounds.size.height)        self.labAnimation()    }    //跑马灯动画    func labAnimation() {        if (!isStop) {            UIView.transitionWithView(self, duration: timeInterval1, options: UIViewAnimationOptions.CurveLinear, animations: {                for label in self.labArr {                    label.frame.origin.x -= self.mark.size.width/2                }                }, completion: { finished in                    for label in self.labArr {                        label.frame.origin.x += self.mark.size.width/2                    }                    self.labAnimation()            })        } else {            self.layer.removeAllAnimations()        }    }    func start() {        isStop = false        self.labAnimation()    }    func stop() {        isStop = true        self.labAnimation()    }    func tapClick(gesture: UITapGestureRecognizer) {        let clickPoint = gesture.locationInView(self)        for view in self.subviews {            if let label = view as? UILabel {                if let obj = label.layer.presentationLayer() as? CALayer {                    if (obj.hitTest(clickPoint) != nil) {                        if let text = label.text {                            for (index,value) in EnumerateSequence(titleArray) {                                if text == value {                                    if urlArray.count > index {                                        self.delegate?.didSelectURL(urlArray[index])                                    }                                }                            }                        }                    }                }            }        }    }}
0 0
原创粉丝点击