热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个纯Swift的轻量级、灵活且易于使用的PageView框架DNSPageView

项目地址:github.comDanie1sDNS…DNSPageViewDNSPageView一个纯Swift的轻量级、灵活且易于使用的pageView框架

项目地址:github.com/Danie1s/DNS…

DNSPageView

DNSPageView一个纯Swift的轻量级、灵活且易于使用的pageView框架,titleView和contentView可以布局在任意地方,可以纯代码初始化,也可以使用xib或者storyboard初始化,并且提供了常见样式属性进行设置。

Requirements

  • iOS 8.0+

  • Xcode 9.0+

  • Swift 4.0+

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:

$ gem install cocoapods

CocoaPods 1.1+ is required to build DNSPageView.

To integrate DNSPageView into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!target '' dopod 'DNSPageView'
end

Then, run the following command:

$ pod install

Manually

If you prefer not to use any of the aforementioned dependency managers, you can integrate DNSPageView into your project manually.

Example

To run the example project, clone the repo, and run Example.xcodeproj from the Example directory.

Usage

直接使用DNSPageView初始化

// 创建DNSPageStyle,设置样式
let style = DNSPageStyle()
style.isTitleScrollEnable = true
style.isScaleEnable = true// 设置标题内容
let titles = ["头条", "视频", "娱乐", "要问", "体育" , "科技" , "汽车" , "时尚" , "图片" , "游戏" , "房产"]// 创建每一页对应的controller
let childViewControllers: [ContentViewController] = titles.map { _ -> ContentViewController inlet controller = ContentViewController()controller.view.backgroundColor = UIColor.randomColorreturn controller
}let size = UIScreen.main.bounds.size// 创建对应的DNSPageView,并设置它的frame
// titleView和contentView会连在一起
let pageView = DNSPageView(frame: CGRect(x: 0, y: 64, width: size.width, height: size.height), style: style, titles: titles, childViewControllers: childViewControllers)
view.addSubview(pageView)

使用xib或者storyboard初始化

在xib或者storyboard中拖出2个UIView,让它们分别继承DNSPageTitleView和DNSPageContentView,拖线到代码中

@IBOutlet weak var titleView: DNSPageTitleView!@IBOutlet weak var contentView: DNSPageContentView!

对DNSPageTitleView和DNSPageContentView进行设置

// 创建DNSPageStyle,设置样式
let style = DNSPageStyle()
style.titleViewBackgroundColor = UIColor.red
style.isShowCoverView = true// 设置标题内容
let titles = ["头条", "视频", "娱乐", "要问", "体育"]// 设置默认的起始位置
let startIndex = 2// 对titleView进行设置
titleView.titles = titles
titleView.style = style
titleView.currentIndex = startIndex// 最后要调用setupUI方法
titleView.setupUI()// 创建每一页对应的controller
let childViewControllers: [ContentViewController] = titles.map { _ -> ContentViewController inlet controller = ContentViewController()controller.view.backgroundColor = UIColor.randomColorreturn controller
}// 对contentView进行设置
contentView.childViewControllers = childViewControllers
contentView.startIndex = startIndex
contentView.style = style// 最后要调用setupUI方法
contentView.setupUI()// 让titleView和contentView进行联系起来
titleView.delegate = contentView
contentView.delegate = titleView

使用DNSPageViewManager初始化,再分别对titleView和contentView进行布局

创建DNSPageViewManager

private lazy var pageViewManager: DNSPageViewManager = {// 创建DNSPageStyle,设置样式let style = DNSPageStyle()style.isShowBottomLine = truestyle.isTitleScrollEnable = truestyle.titleViewBackgroundColor = UIColor.clear// 设置标题内容let titles = ["头条", "视频", "娱乐", "要问", "体育"]// 创建每一页对应的controllerlet childViewControllers: [ContentViewController] = titles.map { _ -> ContentViewController inlet controller = ContentViewController()controller.view.backgroundColor = UIColor.randomColorreturn controller}return DNSPageViewManager(style: style, titles: titles, childViewControllers: childViewControllers)
}()

布局titleView和contentView

// 单独设置titleView的frame
navigationItem.titleView = pageViewManager.titleView
pageViewManager.titleView.frame = CGRect(x: 0, y: 0, width: 180, height: 44)// 单独设置contentView的大小和位置,可以使用autolayout或者frame
let contentView = pageViewManager.contentView
view.addSubview(pageViewManager.contentView)
contentView.snp.makeConstraints { (maker) inmaker.edges.equalToSuperview()
}

样式

DNSPageStyle中提供了常见样式的属性,可以按照不同的需求进行设置,包括可以设置初始显示的页面

事件监听

DNSPageView提供了常见事件监听的代理,它属于DNSPageTitleViewDelegate的中的可选属性

/// 如果contentView中的view需要实现某些刷新的方法,请让对应的childViewController遵守这个协议
@objc public protocol DNSPageReloadable: class {/// 如果需要双击标题刷新或者作其他处理,请实现这个方法@objc optional func titleViewDidSelectedSameTitle()/// 如果pageContentView滚动到下一页停下来需要刷新或者作其他处理,请实现这个方法@objc optional func contentViewDidEndScroll()
}

License

DNSPageView is available under the MIT license. See the LICENSE file for more info.



推荐阅读
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文档提供了在iOS开发中使用OClint进行静态代码分析的详细步骤,包括安装、更新和使用方法,以及相关资源链接。 ... [详细]
  • 万事起于配置开发环境
    万事起于配置开发环境 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
  • 本文总结了在使用React Native开发过程中遇到的一些常见问题及其解决方法,包括配置错误、依赖问题和特定组件的使用技巧。 ... [详细]
  • 本文详细介绍了如何在最新版本的Xcode中重命名iOS项目,包括项目名称、应用名称及相关的文件夹和配置文件。通过本文,开发者可以轻松完成项目的重命名工作。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文探讨了使用React Native框架开发的应用,在通过AppCenter构建iOS版本时遇到的‘CopyPlistFile’命令失败的问题,并提供了详细的解决方案。 ... [详细]
  • 如何使用Ionic3框架创建首个混合开发应用
    混合开发是指结合原生(Native)与网页(Web)技术进行移动应用开发的方法。本文将详细介绍如何利用Ionic3这一流行的混合开发框架,从环境搭建到创建并运行首个应用的全过程。 ... [详细]
  • 在使用 iOS 应用时,遇到网络请求错误是常见的问题。本文将探讨两种常见的错误代码 -1003 和 -1001,并提供详细的解释和解决方案。 ... [详细]
  • 本教程旨在指导开发者如何在Mac上设置React Native的开发环境,以进行iOS应用的开发。文中详细介绍了必要的软件安装步骤,包括Xcode、Homebrew、Node.js、Watchman以及React Native CLI等工具的安装方法。 ... [详细]
  • 作为一名在大型手机游戏公司工作的程序员,尽管主要负责游戏逻辑和内容的开发,但对iOS底层开发接触较少。现在有了iPhone和可以虚拟MAC环境的电脑,希望能找到有效的iOS开发学习路径。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
author-avatar
mobiledu2502912817
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有