登录 当即注册
金钱:

Code4App-188bet注册-iOS 开源代码库-www.188bet.com实例查找-iOS特效示例-www.188bet.com比方下载-Code4App.com

m88 188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help

188bet开户 Swift [仿制链接]

2019-2-18 10:33
hellokenken 阅览:1367 谈论:0 赞:1
Tag:  

腾讯新闻、今天头条、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|请求友链|手机版|Code4App ( 粤ICP备15117877号-1 )

回来顶部