• 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-04-18
  • 生活-热门标签-华商生活 2019-04-18
  • 文化山西:风华长城岁月歌 2019-04-16
  • 中华龙舟大赛福州站收官 黑马异军突起摘大满贯 2019-04-16
  • 台湾布袋戏大师陈锡煌的两岸缘 2019-04-13
  • 老师:讲课再累都不怕 就怕各级搞检查讲课再累都不怕-教育时讯 2019-04-13
  • 行业变革中的房产经纪公司加盟暗战 ——凤凰网房产深圳 2019-03-31
  • 图解:习近平出席博鳌亚洲论坛2018年年会前瞻 2019-03-19
  • 外贸创新举措 让开放惠及世界 2019-03-15
  • 记者带你逛CES:体验未来科技 2019-03-14
  • 我的中国医改建议,彻底解决看病难看病贵 2019-03-14
  • 海空联合演练相关新闻 2019-01-05
  • 登录 立即注册
    金钱:

    广州快乐十分开奖记录

    快乐十分网投:每个APP都用得上的SegmentedView Swift [复制链接]

    2019-2-18 10:33
    hellokenken 阅读:675 评论:0 赞:1
    Tag:  

    广州快乐十分开奖记录 www.2hyn.net 腾讯新闻、今日头条、QQ音乐、网易云音乐、京东、爱奇艺、腾讯视频、淘宝、天猫、简书、微博等所有主流APP分类切换滚动视图

    与其他的同类三方库对比的优点:

    • 指示器逻辑面向协议编程(Protocol Oriented Programming),可以为所欲为的扩展指示器效果;

    • 提供更加全面丰富效果,几乎支持所有主流APP效果;

    • 使用子类化管理cell样式,逻辑更清晰,扩展更简单;

    Github地址

    下载源码,一睹为快! https://github.com/pujiaxin33/JXSegmentedView

    效果预览

    指示器效果预览

    说明Gif
    Line固定宽度

    Line与cell等宽

    Line延长

    Line延长+偏移

    RainbowLine彩虹

    DotLine点线

    DoubleLine双线

    Triangle三角形底部

    Triangle三角形顶部

    Background椭圆形

    Background椭圆形+阴影

    Background遮罩有背景

    Background遮罩无背景

    Background渐变色
    (渐变是固定的)


    Gradient渐变色
    (渐变随着位置变动)


    Image底部

    Image背景

    混合使用

    以下指示器支持上下位置切换:JXSegmentedIndicatorLineView、JXSegmentedIndicatorRainbowLineView、JXSegmentedIndicatorDotLineView、JXSegmentedIndicatorDoubleLineView、JXSegmentedIndicatorTriangleView、JXSegmentedIndicatorImageView

    Cell样式效果预览

    说明Gif
    颜色渐变

    文字渐变

    大小缩放

    大小缩放+字体粗细

    大小缩放+点击动画

    大小缩放+cell宽度缩放

    TitleImage_Top

    TitleImage_Left

    TitleImage_Bottom

    TitleImage_Right

    TitleImage_只有图片

    TitleOrImage(高仿腾讯视频)

    数字

    红点

    多行富文本

    多种cell混用

    特殊效果预览

    说明Gif
    数据源过少
    isItemSpacingAverageEnabled为true


    数据源过少
    isItemSpacingAverageEnabled为false


    SegmentedControl
    参考SegmentedControlViewController


    导航栏使用
    参考NaviSegmentedControlViewController


    嵌套使用
    参考NestViewController


    个人主页(上下左右滚动、header悬浮)
    参考PagingViewController
    更多样式请点击查看JXPagingView库


    数据加载&刷新
    参考LoadDataViewController


    要求

    • iOS 8.0+

    • Xcode 9+

    • Swift 4.2

    安装

    手动

    Clone代码,把Sources文件夹拖入项目,就可以使用了;

    CocoaPods

    1
    2
    3
    target '' do
        pod 'JXSegmentedView'
    end

    先执行pod repo update,再执行pod install

    使用

    JXSegmentedView使用示例

    1.初始化JXSegmentedView

    1
    2
    3
    self.segmentedView = JXSegmentedView()
    self.delegate = self
    self.view.addSubview(self.segmentedView)

    2.初始化dataSource

    dataSouce类型为JXSegmentedViewDataSource协议。使用单独的类实现JXSegmentedViewDataSource协议,实现代码隔离。选择不同的类赋值给dataSource,就可以控制JXSegmentedView显示效果,实现插件化。比如选择JXSegmentedTitleImageDataSource类作为dataSource就选择了文字图片的显示效果;选择JXSegmentedNumberDataSource类作为dataSource就选择了文字加数字的显示效果;

    //segmentedDataSource一定要通过属性强持有,不然会被释放掉

    1
    2
    3
    4
    5
    6
    7
    8
    self.segmentedDataSource = JXSegmentedTitleDataSource()
    //配置数据源相关配置属性
    self.segmentedDataSource.titles = ["猴哥""青蛙王子""旺财"]
    self.segmentedDataSource.isTitleColorGradientEnabled = true
    //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
    self.segmentedDataSource.reloadData(selectedIndex: 0)
    //关联dataSource
    self.segmentedView.dataSource = self.segmentedDataSource

    3.初始化指示器indicator

    1
    2
    3
    let indicator = JXSegmentedIndicatorLineView()
    indicator.indicatorWidth = 20
    self.segmentedView.indicators = [indicator]

    4.实现JXSegmentedViewDelegate代理

    1
    2
    3
    4
    5
    6
    7
    8
    //点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,而不关心具体是点击还是滚动选中的情况。
    func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {}
    // 点击选中的情况才会调用该方法
    func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {}
    // 滚动选中的情况才会调用该方法
    func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) {}
    // 正在滚动中的回调
    func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {}

    contentScrollView列表容器使用示例

    直接使用UIScrollView自定义使用示例

    因为代码比较分散,而且代码量也比较多,所有不推荐使用该方法。要正确使用需要注意的地方比较多,尤其对于刚接触iOS的同学来说不太友好。

    不直接贴代码了,具体点击LoadDataCustomViewController查看源代码了解。

    作为替代,官方使用&强烈推荐使用下面这种方式。

    配合JXSegmentedListContainerView封装类使用示例

    JXSegmentedListContainerView是对列表视图高度封装的类,具有以下优点:

    • 相对于直接使用UIScrollView自定义,封装度高、代码集中、使用简单;

    • 列表懒加载:当显示某个列表的时候,才进行列表初始化。而不是一次性加载全部列表,性能更优;

    1.初始化JXSegmentedListContainerView

    1
    2
    3
    4
    self.listContainerView = JXSegmentedListContainerView(dataSource: self)
    self.view.addSubview(self.listContainerView)
    //关联cotentScrollView,关联之后才可以互相联动?。?!
    self.segmentedView.contentScrollView = self.listContainerView.scrollView

    2.实现JXSegmentedListContainerViewDataSource代理方法

    1
    2
    3
    4
    5
    6
    7
    8
    //返回列表的数量
    func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
        return self.segmentedDataSource.titles.count
    }
    //返回遵从`JXSegmentedListContainerViewListDelegate`协议的实例
    func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
        return ListBaseViewController()
    }

    3.列表实现JXSegmentedListContainerViewListDelegate代理方法

    不管列表是UIView还是UIViewController都可以,提高使用灵活性,更便于现有的业务接入。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /// 如果列表是VC,就返回VC.view
    /// 如果列表是View,就返回View自己
    /// - Returns: 返回列表视图
    func listView() -> UIView {
        return view
    }
     
    //可选使用,列表显示的时候调用
    func listDidAppear() {}
     
    //可选使用,列表消失的时候调用
    func listDidDisappear() {}

    4.将关键事件告知JXSegmentedListContainerView

    在下面两个JXSegmentedViewDelegate代理方法里面调用对应的代码,一定不要忘记这一条??????

    1
    2
    3
    4
    5
    6
    7
    8
    func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
        //传递didClickSelectedItemAt事件给listContainerView,必须调用?。?!
        listContainerView.didClickSelectedItem(at: index)
    }
    func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
        //传递scrolling事件给listContainerView,必须调用?。?!
        listContainerView.segmentedViewScrolling(from: leftIndex, to: rightIndex, percent: percent, selectedIndex: segmentedView.selectedIndex)
    }

    具体点击LoadDataViewController查看源代码了解

    使用总结

    因为JXSegmentedView本身支持许多特性:指示器、cell样式、列表容器等,如何有序管理好代码成了一个难题。借助于协议、继承、封装类极大的简化了使用难度,而且提高了灵活性,扩展相当容易。

    • 核心主类:JXSegmentedView

    • 数据源&cell样式定制类:遵从JXSegmentedViewDataSource协议的类

    • 指示器类:遵从JXSegmentedIndicatorProtocol协议的UIView

    • 列表容器:官方推荐JXSegmentedListContainerView类,特殊情况可以使用UIScrollView自定义

    指示器样式自定义

    • 需要继承JXSegmentedIndicatorProtocol协议,点击参看JXSegmentedIndicatorProtocol

    • 提供了继承JXSegmentedIndicatorProtocol协议的基类JXSegmentedIndicatorBaseView,里面提供了许多基础属性。点击参看JXSegmentedIndicatorBaseView

    • 自定义指示器,请参考已实现的指示器视图,多尝试、多思考,再有问题请提Issue或加入反馈QQ群

    dataSource和Cell自定义

    • 需要继承JXSegmentedViewDataSource协议,点击参看JXSegmentedViewDataSource

    • 提供了继承JXSegmentedViewDataSource协议的基类JXSegmentedBaseDataSource,里面提供了许多基础属性。点击参看JXSegmentedBaseDataSource

    • 任何自定义需求,dataSource、cell、itemModel三个都要子类化。即使某个子类cell什么事情都不做。用于维护继承链,以免以后子类化都不知道要继承谁了;

    • dataSource和Cell自定义,请参考已实现的dataSource,多尝试、多思考,再有问题请提Issue

    分享到:
    我来说两句
    facelist
    您需要登录后才可以评论 登录 | 立即注册
    所有评论(0)
    关闭

    每日头条

    通过邮件订阅最新 Code4App 信息
    上一条 /4 下一条
    联系我们
    关闭
    合作电话:
    13802416937
    Email:
    [email protected]
    商务市场合作/投稿
    问题反馈及帮助
    联系我们

    广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|Github|申请友链|手机版|广州快乐十分开奖记录 ( 广州快乐十分开奖记录 )

    返回顶部
  • 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-04-18
  • 生活-热门标签-华商生活 2019-04-18
  • 文化山西:风华长城岁月歌 2019-04-16
  • 中华龙舟大赛福州站收官 黑马异军突起摘大满贯 2019-04-16
  • 台湾布袋戏大师陈锡煌的两岸缘 2019-04-13
  • 老师:讲课再累都不怕 就怕各级搞检查讲课再累都不怕-教育时讯 2019-04-13
  • 行业变革中的房产经纪公司加盟暗战 ——凤凰网房产深圳 2019-03-31
  • 图解:习近平出席博鳌亚洲论坛2018年年会前瞻 2019-03-19
  • 外贸创新举措 让开放惠及世界 2019-03-15
  • 记者带你逛CES:体验未来科技 2019-03-14
  • 我的中国医改建议,彻底解决看病难看病贵 2019-03-14
  • 海空联合演练相关新闻 2019-01-05
  • 赌博网站 2011212期p3试机号 吉林十一选五开奖结果 win007足球比分 3d开奖号码 六合彩报码 福彩3d和值走势图最近500 江西老时时彩开奖直播 福彩开奖是什么电视台 任选9场复式中奖规则及奖金 新时时彩后二组选 湖南幸运赛车玩法规则 上海时时乐选号技巧 京东彩票怎么兑奖 pc28幸运最快开奖结果 特区七星彩论坛