MG--滚动的视觉差效果

作者: Mg明明就是你 | 来源:发表于2016-12-13 21:06 被阅读202次

    几句代码完成tableView滚动的视觉差

    • 效果图 (失帧严重)


    • 补录一张好一点的效果图

    效果图.gif
    • 主要原理:

    • 1、设置UI。简单说一下,就是先往tableViewCell添加一个UIView,这个view的尺寸大小等于cell或者说等于cell.contentView;然后在往这个View添加一个UIImageView,这个imageView的约束是左右为0,水平居中,然后设置它的高度比cell大(具体数值可以根据图片的实际大小调整)因为超出父控件大小会不显示,这边设置的是400的大小。
    • 2、就是在UITableViewDelegate的代理方法func scrollViewDidScroll(_ scrollView: UIScrollView)方法中动态修改imageView.origin.y的值,造成一种错觉是图片滚动的视觉差。其次,要补充说明的是:我们要对cell进行处理的是出现在屏幕上的cell,并不是所有的cell,于是我们通过self.tableView.visibleCells获取所有出现屏幕上的cell,for循环遍历通过cell取出即可imageView的父视图,通过它的判断frame.origin.y通过处理,然后再将值赋值给imageView.frame.origin.y即可实现最终效果

    • 说明:这是在StoryBoard做的,所以在SB给view和imageView分别绑定了一个tag,以便取这两个控件,当然也可以自定义cell,然后在自定义cell中脱线出来,则不需要绑定tag,通过属性就可以取出这两个控件,更方便
      • 辅助图

    • 代码区域

    //  ViewController.swift
    //  MGTableView
    import UIKit
    class ViewController: UIViewController {
        @IBOutlet weak var tableView: UITableView!
        // 数据源
        fileprivate lazy var dataArr: [UIImage] = {
            var arr: [UIImage] = [UIImage]()
            for _ in 1...10 {
                for i in 1...10 {
                    let image = UIImage(named: String(format: "%02d", i))
                    arr.append(image!)
                }
            }
            return arr
        }()
        override func viewDidLoad() {
            super.viewDidLoad()
            tableView.layoutMargins = UIEdgeInsets.zero
            tableView.separatorInset = UIEdgeInsets.zero
            tableView.separatorStyle = .none
            tableView.rowHeight = 300
        }
    }
    
    // MARK: - UITableViewDataSource
    extension ViewController: UITableViewDataSource {
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return dataArr.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "cellID", for: indexPath)
            let imageV = cell.viewWithTag(1000) as! UIImageView
            imageV.image = dataArr[indexPath.row]
            return cell
        }
    }
    
    // MARK: - UITableViewDelegate
    extension ViewController: UITableViewDelegate{
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
            for cell in self.tableView.visibleCells {
                // 取出imageView和imageView的父视图
                let imageVParentV = cell.viewWithTag(1001)
                let imageV = cell.viewWithTag(1000)
                let rect = imageVParentV?.convert((imageVParentV?.bounds)!, to: nil)
    //            var y = UIScreen.main.bounds.size.height - (rect?.origin.y)! - 560
                var y = -(rect?.origin.y)!
                y *= 0.2
                // 判断imageView的父视图的frame.origin.y
                if y>0 {
                    y=0
                }
                if y < -200 {
                    y = -200
                }
                // 重新赋值 imageView.frame.origin.y
                imageV?.frame.origin.y = y
            }
        }
    }```
    ***
    ***
    ***
    
    - #github
    
    |  项目  |  简介    |  
        | : | : |
        |  [MGDS_Swif](https://github.com/LYM-mg/MGDS_Swift)  |  逗视视频直播 |
        |  [MGMiaoBo](https://github.com/LYM-mg/MGMiaoBo)  |  喵播视频直播 |  
        |  [MGDYZB](https://github.com/LYM-mg/MGDYZB)  |  斗鱼视频直播 |
        |  [MGDemo](https://github.com/LYM-mg/MGDemo)  |  n多小功能合集 |  
        |   [MGBaisi](https://github.com/LYM-mg/MGBaisi)   |  高度仿写百思   | 
        |   [MGSinaWeibo](https://github.com/LYM-mg/MGSinaWeibo)   | 高度仿写Sina   | 
        |   [MGLoveFreshBeen](https://github.com/LYM-mg/MGLoveFreshBeen)   |  一款电商App   | 
        |   [MGWeChat](https://github.com/LYM-mg/MGWeChat)   |  小部分实现微信功能   | 
        |  [MGTrasitionPractice](https://github.com/LYM-mg/MGTrasitionPractice)   |  自定义转场练习   | 
        |  [DBFMDemo](https://github.com/LYM-mg/DBFMDemo)  |  豆瓣电台   | 
        | [MGPlayer](https://github.com/LYM-mg/MGPlayer)  |  一个播放视频的Demo   | 
        |  [MGCollectionView](https://github.com/LYM-mg/MGCollectionView)  |  环形图片排布以及花瓣形排布   | 
        |  [MGPuBuLiuDemo](https://github.com/LYM-mg/MGPuBuLiuDemo)  |  瀑布流--商品展   | 
        |  [MGSlideViewDemo](https://github.com/LYM-mg/MGSlideViewDemo)  |  一个简单点的侧滑效果,仿QQ侧滑   | 
        | [MyResume](https://github.com/LYM-mg/MyResume)  |  一个展示自己个人简历的Demo   | 
        |  [GoodBookDemo](https://github.com/LYM-mg/GoodBookDemo) |  好书   | 
    
       - #[1、直播喵播MGMiaoBo下载](https://github.com/LYM-mg/MGMiaoBo)
    ![Snip20161026_15.png](http:https://img.haomeiwen.com/i1429890/5c0296ffb33d18e2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    ![Snip20161026_16.png](http:https://img.haomeiwen.com/i1429890/9ca835b72a5b053a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    ![Snip20161026_35.png](http:https://img.haomeiwen.com/i1429890/0e19cf9d25ed0c27.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
       - #[2、逗视:逗你玩的直播App,可下载试玩](https://github.com/LYM-mg/MGDS_Swift)
      - >#看下效果
    ![逗视介绍1.gif](http:https://img.haomeiwen.com/i1429890/ecd25e08d367c32e.gif?imageMogr2/auto-orient/strip)
    ![逗视介绍2.gif](http:https://img.haomeiwen.com/i1429890/91b427263bc09abd.gif?imageMogr2/auto-orient/strip)
    ***

    相关文章

      网友评论

      本文标题:MG--滚动的视觉差效果

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