UI_25_饭灯片效果_FSPagerView

请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

platform :ios, '13.0'
use_frameworks!

target 'DemoApp' do
    source 'https://github.com/CocoaPods/Specs.git'
    pod 'FSPagerView'
end
import UIKit
import FSPagerView
//FSPagerViewDataSource, FSPagerViewDelegate
class ViewController: UIViewController, FSPagerViewDataSource, FSPagerViewDelegate {
    
    // 数据源:
    fileprivate let imageNames = ["1","2","3","4","5","6","7"]
    fileprivate var numberOfItems = 7 // 数量;
    var pagerView: FSPagerView! // 饭灯片视图 对象; (是继承UICollectionView集合视图)

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 初始化:
        pagerView = FSPagerView(frame: CGRect(x: 0, y: 100, width: self.view.bounds.width, height: 200))
        pagerView.dataSource = self
        pagerView.delegate = self
        self.view.addSubview(pagerView)
        
        // 循环 展示模式:
        pagerView.isInfinite = true //循环 展示模式;
        
        // 设置 饭灯片 页面的尺寸:  缩小0.8:
        self.pagerView.itemSize = self.pagerView.frame.size.applying(
            CGAffineTransform(scaleX: 0.8, y: 0.8))
        self.pagerView.interitemSpacing = 10 // 设置两个页面的间距;
        
        // 设置 Cell复用 标识符:(FSPagerView饭灯片视图是继承UICollectionView集合视图)
        pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
    }

    func numberOfItems(in pagerView: FSPagerView) -> Int {
        return numberOfItems
    }
    
    func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
        
        cell.imageView?.image = UIImage(named: self.imageNames[index])
        cell.imageView?.contentMode = .scaleAspectFill // 图片填充整个Cell;
        
        cell.imageView?.clipsToBounds = true // 边缘裁剪;
        cell.textLabel?.text = "Photo #\(index.description)"
        return cell
    }
    
    // Cell 的点击事件:
    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
        // 点击Cell时, 跳转到指定的页面:
        pagerView.deselectItem(at: index, animated: true)
        pagerView.scrollToItem(at: index, animated: true)
    }
}

请添加图片描述

import UIKit
import FSPagerView
class ViewController: UIViewController, FSPagerViewDataSource, FSPagerViewDelegate {
    fileprivate let imageNames = ["1","2","3","4","5","6","7"]
    fileprivate var numberOfItems = 7
    var pagerView: FSPagerView!
    var pageControl: FSPageControl! // 页面识别器;

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //
        pagerView = FSPagerView(frame: CGRect(x: 0, y: 100, width: self.view.bounds.width, height: 200))
        pagerView.dataSource = self
        pagerView.delegate = self
        pagerView.isInfinite = true
        pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
        self.view.addSubview(pagerView)
        
        
        // 初始化 识别器 作为页码识别器: 位于 饭灯片的底部:
        pageControl = FSPageControl(frame: CGRect(x: 0, y: 270, width: self.view.bounds.width, height: 40))
        self.pageControl.numberOfPages = self.imageNames.count
        self.pageControl.contentHorizontalAlignment = .center
        self.pageControl.contentInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
        self.view.addSubview(pageControl)
    }

    func numberOfItems(in pagerView: FSPagerView) -> Int {
        return numberOfItems
    }
    
    func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
        cell.imageView?.image = UIImage(named: self.imageNames[index])
        cell.imageView?.contentMode = .scaleAspectFill
        cell.imageView?.clipsToBounds = true
        cell.textLabel?.text = "Photo #\(index.description)"
        return cell
    }
    
    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
        pagerView.deselectItem(at: index, animated: true)
        pagerView.scrollToItem(at: index, animated: true)
    }
    
    // 当用停止拖到拖动时,修改页码识别器的当前页码:
    func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
        self.pageControl.currentPage = targetIndex
    }
    
    // 当 饭灯片停止滚动时,也刷新页码识别器的当前页码:
    func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
        self.pageControl.currentPage = pagerView.currentIndex
    }
}

请添加图片描述

import UIKit
import FSPagerView
class ViewController: UIViewController, FSPagerViewDataSource, FSPagerViewDelegate {
    
    // 定义一个贝赛尔路径:
    fileprivate var starPath: UIBezierPath {
        // 获取页面识别器两个圆点之间的距离,
        let distance = self.pageControl.itemSpacing
        
        // 初始化一个贝赛尔路径:
        let starPath = UIBezierPath()
        
        //使贝赛尔路径依次通过4个坐标: (绘制一个正方形) 作为页码识别器的形状:
        starPath.move(to: CGPoint(x: distance, y: 0))
        starPath.addLine(to: CGPoint(x: distance, y: distance))
        starPath.addLine(to: CGPoint(x: 0, y: distance))
        starPath.addLine(to: CGPoint(x: 0, y: 0))
        starPath.close() // 关闭路径;
        return starPath
    }
    
    fileprivate let imageNames = ["1","2","3","4","5","6","7"]
    fileprivate var numberOfItems = 7
    var pagerView: FSPagerView!
    var pageControl: FSPageControl!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //
        pagerView = FSPagerView(frame: CGRect(x: 0, y: 100, width: self.view.bounds.width, height: 200))
        pagerView.dataSource = self
        pagerView.delegate = self
        pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
        self.view.addSubview(pagerView)
        
        // Create a page control
        pageControl = FSPageControl(frame: CGRect(x: 0, y: 277, width: self.view.bounds.width, height: 20))
        self.pageControl.numberOfPages = self.imageNames.count
        self.pageControl.contentHorizontalAlignment = .center
        self.pageControl.hidesForSinglePage = true
        self.view.addSubview(pageControl)
        
        /// 设置页码的样式:
        //yeTye1()
        //yeTye2()
        yeTye3()
    }

    func yeTye1(){
        // 设置 正常和选择状态下的页码识别器的 描边颜色:
        self.pageControl.setStrokeColor(.clear, for: .normal)
        self.pageControl.setStrokeColor(.orange, for: .selected)
        
        // 设置 正常和选择状态下的页码识别器的 填充颜色:
        self.pageControl.setFillColor(.gray, for: .normal)
        self.pageControl.setFillColor(.orange, for: .selected)
    }
    
    // 用贝赛尔路径 绘制自定义形状的页码识别器:
    func yeTye2(){
        self.pageControl.setStrokeColor(.orange, for: .normal)
        self.pageControl.setStrokeColor(.orange, for: .selected)
        self.pageControl.setFillColor(.orange, for: .selected)
        
        // 将路径作为页码识别器的形状:
        self.pageControl.setPath(self.starPath, for: .normal)
        self.pageControl.setPath(self.starPath, for: .selected)
    }
    
    // 用图片作为页码 识别器的形状:
    func yeTye3(){
        // 用图片作为页码 识别器的形状:
        self.pageControl.setImage(UIImage(named:"heart"), for: .normal)
        self.pageControl.setImage(UIImage(named:"love"), for: .selected)
        
        // 设置页码识别器的间距:
        self.pageControl.interitemSpacing = 20
        self.pageControl.itemSpacing = 10
    }
    
    func numberOfItems(in pagerView: FSPagerView) -> Int {
        return numberOfItems
    }
    
    func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
        cell.imageView?.image = UIImage(named: self.imageNames[index])
        cell.imageView?.contentMode = .scaleAspectFill
        cell.imageView?.clipsToBounds = true
        cell.textLabel?.text = index.description+index.description
        return cell
    }
    
    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
        pagerView.deselectItem(at: index, animated: true)
        pagerView.scrollToItem(at: index, animated: true)
    }
    
    func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
        self.pageControl.currentPage = targetIndex
    }
    
    func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
        self.pageControl.currentPage = pagerView.currentIndex
    }
}

请添加图片描述

import UIKit
import FSPagerView
class ViewController: UIViewController, FSPagerViewDataSource, FSPagerViewDelegate {
    fileprivate let imageNames = ["1","2","3","4","5","6","7"]
    fileprivate var numberOfItems = 7
    var pagerView: FSPagerView!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        pagerView = FSPagerView(frame: CGRect(x: 0, y: 100, width: self.view.bounds.width, height: 200))
        pagerView.dataSource = self
        pagerView.delegate = self
        pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
        self.view.addSubview(pagerView)
        
        ///-- 转场  效果动画: (共有 9 种效果)
        yeTye1()
        //yeTye2()
        //yeTye3()
    }

    func yeTye1(){
        /// 1. 交叉 (透明度) 渐显:
        //pagerView.transformer = FSPagerViewTransformer(type: .crossFading)
        
        /// 2. 缩小 (有立体感, 效果较好)
        //pagerView.transformer = FSPagerViewTransformer(type: .zoomOut)
        
        
        /// 3. 三维界面的形式 (3D)
        pagerView.transformer = FSPagerViewTransformer(type: .coverFlow)
        // 设置 饭灯片 页面的尺寸:
        self.pagerView.itemSize = CGSize(width: 320, height: 200)
        // 设置饭灯片页面拥有自动调整的间距:
        self.pagerView.decelerationDistance = FSPagerView.automaticDistance
    }
    
    func yeTye2(){
        ///4.  立方体 旋转的效果:
        pagerView.transformer = FSPagerViewTransformer(type: .cubic)
        // 将饭灯片的页面缩放到 0.9倍:
        let transform = CGAffineTransform(scaleX: 0.9, y: 0.9)
        self.pagerView.itemSize = self.pagerView.frame.size.applying(transform)
        //设置 饭灯片的减速距离为1, 该值表示减速期间通过的项目数:
        self.pagerView.decelerationDistance = 1
    }
    
    func yeTye3(){
        /// 5.    摩天轮: 扇形 旋转:
        pagerView.transformer = FSPagerViewTransformer(type: .ferrisWheel)
        // 设置饭灯片页面的尺寸:
        self.pagerView.itemSize = CGSize(width: 260, height: 180)
        // 设置饭灯片的减速距离为自动, 可以根据饭灯片的滚动速度自动计算实际的减速距离:
        self.pagerView.decelerationDistance = FSPagerView.automaticDistance
    }
    
    func numberOfItems(in pagerView: FSPagerView) -> Int {
        return numberOfItems
    }
    
    func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
        cell.imageView?.image = UIImage(named: self.imageNames[index])
        cell.imageView?.contentMode = .scaleAspectFill
        cell.imageView?.clipsToBounds = true
        return cell
    }
    
    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
        pagerView.deselectItem(at: index, animated: true)
        pagerView.scrollToItem(at: index, animated: true)
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
源码iOS-ViewPagerIndicator,Paging indicator widgets,swift版的分页指示器,可以配合UIScrollView使用完成分页控制,Paging indicator widgets,swift版的分页指示器,可以配合UIScrollView使用完成分页控制 //样式设置 viewPagerIndicator.setTitleColorForState(UIColor.blackColor(), state: UIControlState.Selected)//选中文字的颜色 viewPagerIndicator.setTitleColorForState(UIColor.blackColor(), state: UIControlState.Normal)//正常文字颜色 viewPagerIndicator.tintColor = UIColor.brownColor()//指示器和基线的颜色 viewPagerIndicator.showBottomLine = false//基线是否显示 viewPagerIndicator.autoAdjustSelectionIndicatorWidth = true//指示器宽度是按照文字内容大小还是按照count数量平分屏幕 viewPagerIndicator.indicatorDirection = .Top//指示器位置 viewPagerIndicator.indicatorHeight = viewPagerIndicator.bounds.height//指示器高度 //点击viewPagerIndicator可以控制scrollView //滑动scrollView可以改变viewPagerIndicator //点击顶部选中后回调 func indicatorChange(indicatorIndex: Int){ scrollView.scrollRectToVisible(CGRectMake(self.view.bounds.width * CGFloat(indicatorIndex), 0, self.view.bounds.width, scrollViewHeight), animated: true) } //滑动scrollview回调 func scrollViewDidEndDecelerating(scrollView: UIScrollView) { var xOffset: CGFloat = scrollView.contentOffset.x var x: Float = Float(xOffset) var width:Float = Float(self.view.bounds.width) let index = Int((x + (width * 0.5)) / width) viewPagerIndicator.setSelectedIndex(index)//改变顶部选中 }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值