[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6763":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},6763,"FSPagerView","WenchaoD\u002FFSPagerView","WenchaoD","FSPagerView is an elegant Screen Slide Library. It is extremely helpful for making Banner View、Product Show、Welcome\u002FGuide Pages、Screen\u002FViewController Sliders.","",null,"Swift",7371,1069,103,155,0,6,65.69,"MIT License",false,"master",true,[24,25,26,27,28,29,30,31,32,33],"banner","banner-slider","banner-view","infinite-scroll","ios","objective-c","pages","swift","uicollectionview","uicollectionviewlayout","2026-06-12 04:00:30","![fspagerview](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F24086370\u002F45e7e8dc-0d49-11e7-86aa-139354fe00c5.jpg)\n\n[![Languages](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguage-swift%205.0%20|%20objc-FF69B4.svg?style=plastic)](#) \u003Cbr\u002F>\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-iOS%20|%20tvOS-blue.svg?style=plastic)](http:\u002F\u002Fcocoadocs.org\u002Fdocsets\u002FFSPagerView)\n[![Version](https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FFSPagerView.svg?style=plastic)](http:\u002F\u002Fcocoadocs.org\u002Fdocsets\u002FFSPagerView) \n[![Carthage compatible](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCarthage-compatible-4BC51D.svg?style=plastic)](https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage)\n[![SPM compatible](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSPM-compatible-FF9966.svg?style=plastic)](https:\u002F\u002Fswift.org\u002Fpackage-manager\u002F)\n\n|\u003Cb>SWIFT\u003C\u002Fb>|[\u003Cb>OBJECTIVE-C\u003C\u002Fb>](https:\u002F\u002Fgithub.com\u002FWenchaoD\u002FFSPagerView\u002Fblob\u002Fmaster\u002FREADME-OBJECTIVE-C.md) |\n|---|---|\n\n**FSPagerView** is an elegant Screen Slide Library implemented primarily with ***UICollectionView***. It is extremely helpful for making Banner、Product Show、Welcome\u002FGuide Pages、Screen\u002FViewController Sliders.\n\n## Features\n*  ***Infinite*** scrolling.\n*  ***Automatic*** Sliding.\n*  ***Horizontal*** and ***Vertical*** paging.\n*  Fully customizable item, with predefined banner-style item.\n*  Fully customizable ***page control***.\n*  Rich build-in 3D transformers.\n*  ***Simple*** and ***Delightful*** api usage.\n*  Support **SWIFT** and **OBJECTIVE-C**.\n\n## Demos\n* [Demo1 - Banner](#banner)\n* [Demo2 - Transformer](#transformer)\n* [Demo3 - Page Control](#page_control)\n\n### Demo1 - Banner \u003Ca id=\"banner\">\u003C\u002Fa>\n\n| Banner |\n|---|\n|![9](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22688057\u002F9003d880-ed65-11e6-882e-4587c97c8878.gif) |\n\n### automaticSlidingInterval\nThe time interval of automatic sliding. 0 means disabling automatic sliding. Default is 0.\n\n**e.g.**\n\n```swift\npagerView.automaticSlidingInterval = 3.0\n```\n\n\n### isInfinite\nA boolean value indicates whether the pager view has infinite number of items. Default is false.\n\n**e.g.**\n\n```swift\npagerView.isInfinite = true\n```\n\n### decelerationDistance\nAn unsigned integer value that determines the paging distance of the pager view, which indicates the number of passing items during the deceleration. When the value of this property is FSPagerView.automaticDistance, the actual 'distance' is automatically calculated according to the scrolling speed of the pager view. Default is 1.\n\n**e.g.**\n\n```swift\npagerView.decelerationDistance = 2\n```\n\n### itemSize\nThe item size of the pager view. When the value of this property is FSPagerView.automaticSize, the items fill the entire visible area of the pager view. Default is FSPagerView.automaticSize.\n\n**e.g.**\n\n```swift\npagerView.itemSize = CGSize(width: 200, height: 180)\n```\n\n### interitemSpacing\nThe spacing to use between items in the pager view. Default is 0.\n\n**e.g.**\n\n```swift\npagerView.interitemSpacing = 10\n```\n\n## Demo2 - Transformers\n\n|Cross Fading|\n|---|\n| ![1](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686429\u002F1983b97e-ed5f-11e6-9a32-44c1830df7ac.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .crossFading)\n```\n---\n\n\n\n|Zoom Out|\n|---|\n| ![2](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686426\u002F19830862-ed5f-11e6-90be-8fb1319cd125.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .zoomOut)\n```\n---\n\n\n|Depth|\n|---|\n| ![3](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686430\u002F19856c1a-ed5f-11e6-8187-9e4395b7597c.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .depth)\n```\n---\n\n\n|Linear|\n|---|\n| ![4](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686428\u002F198368c0-ed5f-11e6-95df-cfcfe9bc3f29.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .linear)\n```\n---\n\n\n|Overlap|\n|---|\n| ![5](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686431\u002F198905aa-ed5f-11e6-9312-ec371c8c4e44.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .overlap)\n```\n---\n\n\n|Ferris Wheel|\n|------|\n| ![6](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686427\u002F19831c08-ed5f-11e6-8bdb-30e762a85d4b.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .ferrisWheel)\n```\n---\n\n\n|Inverted Ferris Wheel|\n|------|\n| ![7](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686433\u002F19b669a0-ed5f-11e6-8bf0-dc23edf8101f.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .invertedFerrisWheel)\n```\n---\n\n\n|Cover Flow|\n|------|\n| ![8](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22686432\u002F19b567f8-ed5f-11e6-885d-bd660c98b507.gif) |\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .coverFlow)\n```\n---\n\n|Cubic|\n|------|\n| ![9](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F23461598\u002F8875080c-fec5-11e6-8db6-6d8864acfcc1.gif) |\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .cubic)\n```\n---\n\n\n\n> Customize your own transformer by subclassing`FSPagerViewTransformer.`\n\n\n## Demo3 Page Control\n|Page Control|\n|---|\n|![10](https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F22689720\u002F2baabdb0-ed6d-11e6-8287-ef7a2c0f64bc.gif)\n|\n\n### numberOfPages\nThe number of page indicators of the page control. Default is 0.\n\n**e.g.**\n\n```swift\npageControl.numberOfPages = 5\n```\n\n### currentPage\nThe current page, highlighted by the page control. Default is 0.\n\n**e.g.**\n\n```swift\npageControl.currentPage = 1\n```\n\n### contentHorizontalAlignment\nThe horizontal alignment of content within the control’s bounds. Default is center.\n\n**e.g.**\n```swift\npageControl.contentHorizontalAlignment = .right\n```\n\n### setStrokeColor:forState:\nSets the stroke color for page indicators to use for the specified state. (selected\u002Fnormal).\n\n**e.g.**\n\n```swift\npageControl.setStrokeColor(.green, for: .normal)\npageControl.setStrokeColor(.yellow, for: .selected)\n```\n\n\n### setFillColor:forState:\nSets the fill color for page indicators to use for the specified state. (selected\u002Fnormal).\n\n**e.g.**\n\n```swift\npageControl.setFillColor(.gray, for: .normal)\npageControl.setFillColor(.white, for: .selected)\n```\n\n### setImage:forState:\nSets the image for page indicators to use for the specified state. (selected\u002Fnormal).\n\n**e.g.**\n\n```swift\npageControl.setImage(UIImage(named:\"image1\"), for: .normal)\npageControl.setImage(UIImage(named:\"image2\"), for: .selected)\n```\n\n### setPath:forState:\nSets the path for page indicators to use for the specified state. (selected\u002Fnormal).\n\n**e.g.**\n\n```swift\npageControl.setPath(UIBezierPath(rect: CGRect(x: 0, y: 0, width: 8, height: 8)), for: .normal)\npageControl.setPath(UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 8, height: 8)), for: .selected)\n```\n\n## Installation\n* Manually\n* Cocoapods\n* Carthage\n\n### Manually\n1. ***[Download](#)*** the source code.\n2. Extract the zip file, simply drag folder ***Sources*** into your project.\n3. Make sure ***Copy items if needed*** is checked.\n\n### Cocoapods\n```ruby\nuse_frameworks!\ntarget '\u003CYour Target Name>' do\n    pod 'FSPagerView'\nend\n```\n\n### Carthage\n```ruby\ngithub \"WenchaoD\u002FFSPagerView\"\n```\n\n## Tutorial\n* [Getting started](#getting_started)\n* [Implement FSPagerViewDataSource](#implement_fspagerviewdatasource)\n* [Implement FSPagerViewDelegate](#implement_fspagerviewdelegate)\n\n### 1. Getting started \u003Ca id='getting_started'>\u003C\u002Fa>\n\n* Getting started with code\n\n```swift\n\u002F\u002F Create a pager view\nlet pagerView = FSPagerView(frame: frame1)\npagerView.dataSource = self\npagerView.delegate = self\npagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: \"cell\")\nself.view.addSubview(pagerView)\n\u002F\u002F Create a page control\nlet pageControl = FSPageControl(frame: frame2)\nself.view.addSubview(pageControl)\n```\n\n* Getting started with Interface Builder \u003Cbr\u002F>\n1、Simply drag **UIView** instance into your View Controller, Change the `Custom Class` to `FSPagerView`. (Or `FSPageControl`) \u003Cbr\u002F>\n2、Link the `dataSource` and `delegate` property of **FSPagerView** to your View Controller. \u003Cbr\u002F>\n3、Register a cell class.\n\n```swift\n@IBOutlet weak var pagerView: FSPagerView! {\n    didSet {\n        self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: \"cell\")\n    }\n}\n```\n\n\n### 2. Implement FSPagerViewDataSource \u003Ca id='implement_fspagerviewdatasource'>\u003C\u002Fa>\n```swift\npublic func numberOfItems(in pagerView: FSPagerView) -> Int {\n    return numberOfItems\n}\n    \npublic func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {\n    let cell = pagerView.dequeueReusableCell(withReuseIdentifier: \"cell\", at: index)\n    cell.imageView?.image = ...\n    cell.textLabel?.text = ...\n    return cell\n}\n```\n\n### 3. Implement FSPagerViewDelegate \u003Ca id='implement_fspagerviewdelegate'>\u003C\u002Fa>\n\n```swift\nfunc pagerView(_ pagerView: FSPagerView, shouldHighlightItemAt index: Int) -> Bool\n```\n> Asks the delegate if the item should be highlighted during tracking.\n\n---\n\n```swift\nfunc pagerView(_ pagerView: FSPagerView, didHighlightItemAt index: Int)\n```\n> Tells the delegate that the item at the specified index was highlighted.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, shouldSelectItemAt index: Int) -> Bool\n```\n> Asks the delegate if the specified item should be selected.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int)\n```\n> Tells the delegate that the item at the specified index was selected.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int)\n```\n> Tells the delegate that the specified cell is about to be displayed in the pager view.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, didEndDisplaying cell: FSPagerViewCell, forItemAt index: Int)\n```\n> Tells the delegate that the specified cell was removed from the pager view.\n    \n---\n    \n```swift\nfunc pagerViewWillBeginDragging(_ pagerView: FSPagerView)\n```\n> Tells the delegate when the pager view is about to start scrolling the content.\n    \n---\n    \n```swift\nfunc pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int)\n```\n> Tells the delegate when the user finishes scrolling the content.\n    \n---\n    \n```swift\nfunc pagerViewDidScroll(_ pagerView: FSPagerView)\n```\n> Tells the delegate when the user scrolls the content view within the receiver.\n    \n---\n    \n```swift\nfunc pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView)\n```\n> Tells the delegate when a scrolling animation in the pager view concludes.\n    \n---\n    \n```swift\nfunc pagerViewDidEndDecelerating(_ pagerView: FSPagerView)\n```\n> Tells the delegate that the pager view has ended decelerating the scrolling movement.\n\n---\n\n## \u003Ca id=\"support\">\u003C\u002Fa>Support this repo\n* ***Star*** this repo \u003Ca href=\"#\">\u003Cimg style=\"margin-bottom:-12px\" width=\"72\" alt=\"star\" src=\"https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F15383105\u002Ffcf9cdf0-1dc2-11e6-88db-bf221042a584.png\">\u003C\u002Fa>\n\u003Cbr\u002F>\n\n* Buy me a Coffee. ☕️ \n   \n   \u003Ca href=\"https:\u002F\u002Fwww.paypal.me\u002FWenchaoD\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fwww.paypalobjects.com\u002Fwebstatic\u002Fi\u002Flogo\u002Frebrand\u002Fppcom.svg\" width=\"100\" height=\"40\" style=\"margin-bottom:-15px;\">\u003C\u002Fa> &nbsp;&nbsp;|&nbsp;&nbsp;\n\t\u003Ca href=\"https:\u002F\u002Fuser-images.githubusercontent.com\u002F5186464\u002F45949944-46960480-c030-11e8-9e90-30b015698cf6.png\" target=\"_blank\">\u003Cimg src=\"http:\u002F\u002Fa1.mzstatic.com\u002Fus\u002Fr30\u002FPurple49\u002Fv4\u002F50\u002F16\u002Fb3\u002F5016b341-39c1-b47b-2994-d7e23823baed\u002Ficon175x175.png\" width=\"40\" height=\"40\" style=\"margin-bottom:-15px;-webkit-border-radius:10px;border:1px solid rgba(30, 154, 236, 1);\">\u003C\u002Fa> &nbsp;&nbsp;|&nbsp;&nbsp;\n\t\u003Ca href=\"https:\u002F\u002Fcloud.githubusercontent.com\u002Fassets\u002F5186464\u002F15096872\u002Fb06f3a3a-153c-11e6-89f9-2e9c7b88ef42.png\" target=\"_blank\">\u003Cimg src=\"http:\u002F\u002Fa4.mzstatic.com\u002Fus\u002Fr30\u002FPurple49\u002Fv4\u002F23\u002F31\u002F14\u002F233114f8-2e8d-7b63-8dc5-85d29893061e\u002Ficon175x175.jpeg\" height=\"40\" width=\"40\" style=\"margin-bottom:-15px; -webkit-border-radius: 10px;border:1px solid rgba(43, 177, 0, 1)\">\u003C\u002Fa>\n\n--- \n\t\n\t\n## Author\n* ***微博：[@WenchaoD](http:\u002F\u002Fweibo.com\u002FWenchaoD)***\n* ***Twitter: [@WenchaoD](https:\u002F\u002Ftwitter.com\u002FWenchaoD)***\n* Other repos: \n\t* [***FSCalendar***](https:\u002F\u002Fgithub.com\u002FWenchaoD)\n\n---\n\n# [Documentation](http:\u002F\u002Fcocoadocs.org\u002Fdocsets\u002FFSPagerView)\n","FSPagerView 是一个优雅的屏幕滑动库，主要用于创建横幅、产品展示、欢迎\u002F引导页面以及屏幕\u002F视图控制器滑动效果。它基于 UICollectionView 实现，支持无限滚动和自动滑动功能，并且可以水平或垂直分页显示。该库提供了丰富的自定义选项，包括完全可定制的项目样式、预定义的横幅样式项目、自定义页面控制以及内置的3D变换效果。此外，FSPagerView 拥有简洁而愉悦的API使用体验，同时支持 Swift 和 Objective-C 语言。适用于需要在iOS应用中实现流畅滑动效果的各种场景，如新闻客户端的头条轮播图、电子商务应用的商品展示等。",2,"2026-06-11 03:08:45","top_language"]