斗鱼重要页面架构
用到的主要技术如下:
一、懒加载
//1、模型懒加载
fileprivate lazy var amuseVM : AmuseVM = AmuseVM()
//2、视图懒加载
fileprivate lazy var menuView : MenuView = {
let menuView = MenuView.menuView()
menuView.frame = CGRect(x: 0, y: -kMenuViewH, width: kScreenW, height: kMenuViewH)//设置collectionView的-y,放置menuView
return menuView
}()
二、代理
//MARK : - 1、设置代理,里面包含传的视图和对应的索引
protocol PageTitleViewDelegate :class{
func pageTitleView(_ titleView : PageTitleView, selectedIndex index : Int)
}
class PageTitleView: UIView {
//3.1声明一个delegate属性
weak var delegate : PageTitleViewDelegate?
}
//4、在本类中处理代理方法。
delegate?.pageTitleView(self, selectedIndex: currentLabelIndex)
//5、-对外公开的操作FUNC,1、用于homevc作为pagetitleview的代理,再由homevc调用到这里
extension PageContentView{
func setCurrentIndex(currentIndex : Int){
isForbidScrollDelegate = true
let offsetX = CGFloat( currentIndex) * collectionView.frame.width
collectionView.setContentOffset(CGPoint(x:offsetX,y:0), animated: false)
}
}
三、抽取基类
1、UI方面:对于通用的动画、视图等,我们可以抽取出来一个基类,然后让其余视图继承该基类,这样就节省了很多代码。比如推荐和手游页面的下半部分都是一样的,所以我们抽取出一个基类,让两者继承此基类。然后分别在推荐和手游页面添加相应的视图即可。
2、Model方面:为了区分不同页面的Model数据,我们为每个页面创建对应的Model,如果各个页面的Model中的参数名有大量相同的数据,那么我们就可以抽取出来相同的部分来作为一个基类。其余类继承自该类,不同的参数在子类中分别定义,这样更加清晰明了。
四、xib设置视图
1、对视图进行圆角设置
在User Defined Runtime Attributes中的Key Path中添加如下两个值。
layer.cornerRadius = 20
layer.masksToBounds = true
2、图片显示问题
在TabBar上显示图片的时候,我们会发现,图片为蓝色,却不显示本来的颜色,这是因为图片的默认设置为Default,我们需要改成Original Image模式,这样的话就会显示图片的原图像。