跑马灯动画点击事件

代码块

//
//  SNMarqueeView.swift
//  Futianwisdom
//
//  Created by Snow on 16/5/23.
//  Copyright (c) 2016年 futianwisdom. All rights reserved.
//

import UIKit
import SwiftyJSON

protocol 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])
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值