美文网首页iOS 开发继续加油
Swift 网易新闻首页 + Masonry 布局

Swift 网易新闻首页 + Masonry 布局

作者: 目染江夏 | 来源:发表于2018-02-28 13:36 被阅读25次

    核心代码

        //静态变量
        struct MyClassConstants{
            static let testStr = "test"
            static let arrayOfTests: [String] = ["foo", "bar", testStr]
            static let baseTag:Int = 20180228
        }
        /*
         var listVCQueue : NSMutableArray!
         声明一个 数组 但是没有创建
         
         var listVCQueue2 = NSMutableArray()
         声明并且创建一个数组
         
         */
        //存储showVC字典
        var listVCQueue : NSMutableDictionary!
        //记录当前选择的tag
        var btnTag :Int!
        //头部按钮背景视图
        var topBgView:UIView!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.addSubview(self.showScrollView)
            addListVCWithIndex(index: 0)
            topView()
        
        }
        
        //创建头部按钮
        func topView(){
            
            let arr:Array = ["新鲜事","简单点","温柔"]
            topBgView = UIView.init(frame: CGRect(x: 0, y: 0, width: MainScreenWidth, height: 50))
            topBgView.backgroundColor = UIColor.white
            self.view.addSubview(topBgView)
            
            let width = MainScreenWidth/3
            //for 循环
            for (index,value) in arr.enumerated(){
                //创建button
                let button = UIButton(type: UIButtonType.custom)
                button.frame = CGRect(x: width * CGFloat(index), y: 0, width: width, height: 50)
                button.setTitle(value, for: UIControlState.normal)
                button.setTitleColor(UIColor.black, for: UIControlState.normal)
                button.setTitleColor(UIColor.init(red: 66/255.0, green: 164/255.0, blue: 182/255.0, alpha: 1), for: UIControlState.selected)
                button.titleLabel?.font = UIFont.systemFont(ofSize: 14)
                button.tag = MyClassConstants.baseTag + index
                button.addTarget(self, action:#selector(topAction(btn:)), for: UIControlEvents.touchUpInside)
                topBgView.addSubview(button)
                if index == 0{
                    btnTag = MyClassConstants.baseTag + index
                    button.isSelected = true
                }
            }
        }
       
       @objc func topAction(btn:UIButton)  {
           btn.isSelected = true
        if btnTag != 0 && btnTag != btn.tag{
            let preBtn:UIButton = topBgView.viewWithTag(btnTag) as! UIButton
            preBtn.isSelected = !preBtn.isSelected
           }
        let point = CGPoint(x: CGFloat(btn.tag - MyClassConstants.baseTag) * MainScreenWidth , y: showScrollView.contentOffset.y )
          showScrollView.setContentOffset(point, animated: true)
          btnTag = btn.tag
        }
        
        //懒加载 showScrollview
        lazy var showScrollView:UIScrollView = {
            () -> UIScrollView in
            let showScrollView = UIScrollView()
            showScrollView.frame = CGRect(x: 0, y: 50, width: MainScreenWidth, height: MainScreenHeight - 50)
            showScrollView.backgroundColor = UIColor.groupTableViewBackground
            showScrollView.contentSize = CGSize(width: MainScreenWidth * 3, height: 50)
            showScrollView.indicatorStyle = UIScrollViewIndicatorStyle.black
            showScrollView.bounces = true
            showScrollView.isPagingEnabled = true
            showScrollView.delegate = self
            return showScrollView
        }()
        
        
        
        // MARK: - scrollViewDelegate
        //手动滑动
        func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
            showScrollView.isHidden = false
            scrollBy(scrollView: scrollView)
        }
        //代码移动
        func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
            showScrollView.isHidden = false
            scrollBy(scrollView: scrollView)
        }
        // MARK: - 滑动到指定位置,改变button选中效果
        func scrollBy(scrollView : UIScrollView) {
            let row:Int = Int((scrollView.contentOffset.x + MainScreenWidth/2)/MainScreenWidth)
            
            //根据页数添加相应的视图
            addListVCWithIndex(index: row)
            //上一个btn
            let button:UIButton = topBgView.viewWithTag(btnTag) as! UIButton
            button.isSelected = false
            //当前选中btn
            btnTag = row + MyClassConstants.baseTag
            let button1:UIButton = topBgView.viewWithTag(btnTag) as!UIButton
            button1.isSelected = true
            
        }
        // MARK: - 添加VC 到队列
        func addListVCWithIndex(index : Int){
            if listVCQueue == nil{
                listVCQueue = NSMutableDictionary()
            }
            //根据页数添加相应视图 并存入数组
            if listVCQueue.object(forKey: String(index)) == nil {
                let contentVC = CYShowViewController()
                self.addChildViewController(contentVC)
                contentVC.view.left = CGFloat(index) * MainScreenWidth
                contentVC.view.top = 0
                showScrollView.addSubview(contentVC.view)
                listVCQueue.setValue(contentVC, forKey: String(index))
                
            }else{
                
            }
        }
        
    

    mas0nry 布局

            let view = UIView()
            view.backgroundColor = UIColor.red
            self.view.addSubview(view)
         
        
            let label  = UILabel()
            label.backgroundColor = UIColor.white
            label.text = "我是label"
            label.font = UIFont.systemFont(ofSize: 14)
            label.textAlignment = NSTextAlignment.center
            self.view.addSubview(label)
            
            view.mas_makeConstraints { (make : MASConstraintMaker!) in
                make.top.mas_equalTo()(10)
                make.width.equalTo()(self.view)
                make.height.mas_equalTo()(60)
                
            }
            label.mas_makeConstraints { (make : MASConstraintMaker!) in
                make.top.equalTo()(view.mas_bottom)?.offset()(10)
                make.left.equalTo()(view)
                make.right.equalTo()(view)
                make.height.mas_equalTo()(50)
            }
    

    下载链接:https://github.com/MuRanJiangXia/SwiftCYNewsPlay

    相关文章

      网友评论

        本文标题:Swift 网易新闻首页 + Masonry 布局

        本文链接:https://www.haomeiwen.com/subject/azvbxftx.html