FSPagerView is an elegant Screen Slide Library. It is extremely helpful for making Banner View、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders.

Overview

fspagerview

Languages
Platform Version Carthage compatible SPM compatible

SWIFT OBJECTIVE-C

FSPagerView is an elegant Screen Slide Library implemented primarily with UICollectionView. It is extremely helpful for making Banner、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders.

Features

  • Infinite scrolling.
  • Automatic Sliding.
  • Horizontal and Vertical paging.
  • Fully customizable item, with predefined banner-style item.
  • Fully customizable page control.
  • Rich build-in 3D transformers.
  • Simple and Delightful api usage.
  • Support SWIFT and OBJECTIVE-C.

Demos

Demo1 - Banner

Banner
9

automaticSlidingInterval

The time interval of automatic sliding. 0 means disabling automatic sliding. Default is 0.

e.g.

pagerView.automaticSlidingInterval = 3.0

isInfinite

A boolean value indicates whether the pager view has infinite number of items. Default is false.

e.g.

pagerView.isInfinite = true

decelerationDistance

An 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.

e.g.

pagerView.decelerationDistance = 2

itemSize

The 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.

e.g.

pagerView.itemSize = CGSize(width: 200, height: 180)

interitemSpacing

The spacing to use between items in the pager view. Default is 0.

e.g.

pagerView.interitemSpacing = 10

Demo2 - Transformers

Cross Fading
1
pagerView.transformer = FSPagerViewTransformer(type: .crossFading)

Zoom Out
2
pagerView.transformer = FSPagerViewTransformer(type: .zoomOut)

Depth
3
pagerView.transformer = FSPagerViewTransformer(type: .depth)

Linear
4
pagerView.transformer = FSPagerViewTransformer(type: .linear)

Overlap
5
pagerView.transformer = FSPagerViewTransformer(type: .overlap)

Ferris Wheel
6
pagerView.transformer = FSPagerViewTransformer(type: .ferrisWheel)

Inverted Ferris Wheel
7
pagerView.transformer = FSPagerViewTransformer(type: .invertedFerrisWheel)

Cover Flow
8
pagerView.transformer = FSPagerViewTransformer(type: .coverFlow)

Cubic
9
pagerView.transformer = FSPagerViewTransformer(type: .cubic)

Customize your own transformer by subclassingFSPagerViewTransformer.

Demo3 Page Control

Page Control
10

|

numberOfPages

The number of page indicators of the page control. Default is 0.

e.g.

pageControl.numberOfPages = 5

currentPage

The current page, highlighted by the page control. Default is 0.

e.g.

pageControl.currentPage = 1

contentHorizontalAlignment

The horizontal alignment of content within the control’s bounds. Default is center.

e.g.

pageControl.contentHorizontalAlignment = .right

setStrokeColor:forState:

Sets the stroke color for page indicators to use for the specified state. (selected/normal).

e.g.

pageControl.setStrokeColor(.green, for: .normal)
pageControl.setStrokeColor(.yellow, for: .selected)

setFillColor:forState:

Sets the fill color for page indicators to use for the specified state. (selected/normal).

e.g.

pageControl.setFillColor(.gray, for: .normal)
pageControl.setFillColor(.white, for: .selected)

setImage:forState:

Sets the image for page indicators to use for the specified state. (selected/normal).

e.g.

pageControl.setImage(UIImage(named:"image1"), for: .normal)
pageControl.setImage(UIImage(named:"image2"), for: .selected)

setPath:forState:

Sets the path for page indicators to use for the specified state. (selected/normal).

e.g.

pageControl.setPath(UIBezierPath(rect: CGRect(x: 0, y: 0, width: 8, height: 8)), for: .normal)
pageControl.setPath(UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 8, height: 8)), for: .selected)

Installation

  • Manually
  • Cocoapods
  • Carthage

Manually

  1. Download the source code.
  2. Extract the zip file, simply drag folder Sources into your project.
  3. Make sure Copy items if needed is checked.

Cocoapods

use_frameworks!
target '<Your Target Name>' do
    pod 'FSPagerView'
end

Carthage

github "WenchaoD/FSPagerView"

Tutorial

1. Getting started

  • Getting started with code
// Create a pager view
let pagerView = FSPagerView(frame: frame1)
pagerView.dataSource = self
pagerView.delegate = self
pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
self.view.addSubview(pagerView)
// Create a page control
let pageControl = FSPageControl(frame: frame2)
self.view.addSubview(pageControl)
  • Getting started with Interface Builder
    1、Simply drag UIView instance into your View Controller, Change the Custom Class to FSPagerView. (Or FSPageControl)
    2、Link the dataSource and delegate property of FSPagerView to your View Controller.
    3、Register a cell class.
@IBOutlet weak var pagerView: FSPagerView! {
    didSet {
        self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
    }
}

2. Implement FSPagerViewDataSource

public func numberOfItems(in pagerView: FSPagerView) -> Int {
    return numberOfItems
}
    
public func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
    let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
    cell.imageView?.image = ...
    cell.textLabel?.text = ...
    return cell
}

3. Implement FSPagerViewDelegate

func pagerView(_ pagerView: FSPagerView, shouldHighlightItemAt index: Int) -> Bool

Asks the delegate if the item should be highlighted during tracking.


func pagerView(_ pagerView: FSPagerView, didHighlightItemAt index: Int)

Tells the delegate that the item at the specified index was highlighted.


func pagerView(_ pagerView: FSPagerView, shouldSelectItemAt index: Int) -> Bool

Asks the delegate if the specified item should be selected.


func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int)

Tells the delegate that the item at the specified index was selected.


func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int)

Tells the delegate that the specified cell is about to be displayed in the pager view.


func pagerView(_ pagerView: FSPagerView, didEndDisplaying cell: FSPagerViewCell, forItemAt index: Int)

Tells the delegate that the specified cell was removed from the pager view.


func pagerViewWillBeginDragging(_ pagerView: FSPagerView)

Tells the delegate when the pager view is about to start scrolling the content.


func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int)

Tells the delegate when the user finishes scrolling the content.


func pagerViewDidScroll(_ pagerView: FSPagerView)

Tells the delegate when the user scrolls the content view within the receiver.


func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView)

Tells the delegate when a scrolling animation in the pager view concludes.


func pagerViewDidEndDecelerating(_ pagerView: FSPagerView)

Tells the delegate that the pager view has ended decelerating the scrolling movement.


Support this repo

  • Star this repo star

  • Buy me a Coffee. ☕️

      |     |  


Author


Documentation

Comments
  • Is there any way to customize or disable `selectionColor` when a cell is selected?

    Is there any way to customize or disable `selectionColor` when a cell is selected?

    Hello WenchaoD.

    Like a title, I am looking for a way to customize or disable selectionColor on FSPagerViewCell. Actually, I don't want a visual effect for highlighting like changing backgroundColor. Until now, I could find any way to achieve that.

    Is there any interface or method to do that? Or should I fork this repo and modify a source code?

    opened by fullc0de 13
  • Enhancement request: Limit scroll to 1 index at a time

    Enhancement request: Limit scroll to 1 index at a time

    I didn't see this in the Readme, if a user swipes the screen quickly, it can scroll multiple indexes. Is it possible to make it only scroll 1 index at a time, please?

    opened by saldous 10
  • Xcode 9 with iOS 11 target in iMessage template leads to the following crashing issue, when view FSPage view is called.

    Xcode 9 with iOS 11 target in iMessage template leads to the following crashing issue, when view FSPage view is called.

    Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIView 0x103f1ad50> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key dataSource.

    opened by sumeshd 8
  • PagerView changing frame size dynamically

    PagerView changing frame size dynamically

    Hi! Thank you very much for this awesome framework! But I want to have different sizes images in my PagerView, is it possible? I have CollectionViewController and there I implemented this moment (each image in array calculated sizes and sent them to collectionView), but here I can't get the view with custom size for each image... I think that one way to get it this is make images aspectFill, but I want to get more quality images in my app...

    TNX

    opened by st-small 7
  • Use custom cell in Objective-c

    Use custom cell in Objective-c

    I can't inherit swift class to objective c class then there is no way to use custom cell from this awesome control, Any way to make it possible please ?

    opened by fadizant 6
  • Storyboard error

    Storyboard error

    this error started to happen after installing this module with pod.

    IB Designables: Failed to render and update auto layout status for myController (fLq-9I-Zau): dlopen(FSPagerView.framework, 1): no suitable image found.  Did find:
      FSPagerView.framework: required code signature missing for 'FSPagerView.framework'
    

    and causes rendering problems in the storyboard.

    Example:

    captura de pantalla 2018-05-22 a la s 3 48 42 p m

    Uninstalling this module fix the problem.

    Xcode 9.2 Swift 4

    opened by jose920405 6
  • Initial index

    Initial index

    There seems no possibility to set an initial index for the current item right in setting up the pager view. So it's not possible to start the pager view at a specific position rather than always with the first item.

    The FSPagerView provides a function scrollToItem(at index: Int, animated: Bool) to scroll to a specific item. So after setting up the pager view and registering some cells I want to scroll without animation to a specific index (before the first frame has rendered), but I get an exception, that the index is out of bounds of the number of items the collection view has. That's because the numberOfItems is still 0 because the layout of the collection view hasn't yet evaluated its data source methods.

    So the FSPagerView should either have a property like initialIndex or scrollToItem(at:animated:) should handle the scrolling to the index right after the collection view layout has been prepared if called before.

    As a current workaround I can call scrollToItem(at:animated:) via GCD with zero delay in the next frame, so only one frame the wrong item will be shown.

    opened by indieSoftware 6
  • Long Press

    Long Press

    Is there a way to capture a long press. Have a BadgeSwift on top of the image that needs to be changed if the user long presses and then makes a selection from a popup.

    opened by justdan0227 5
  • How to disable Manual Scrolling

    How to disable Manual Scrolling

    I'd like to disable manual scrolling during certain times, but leave items inside the cell clickable.

    This means I can't do userInteractionEnabled = false on the whole pagerview, because it'll block my cell interactions.

    Thanks

    opened by rfgallagher1 4
  • Crash issue after  update project to Xcode9 GM Swift 4.0

    Crash issue after update project to Xcode9 GM Swift 4.0

    Hi there,

    When I update my project from Xcode8 swift 3.0 to Xcode9 GM Swift 4.0, there is a new issue make app crash when launch.

    crash Info: Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<XX.FSPagerView 0x7fa56ad21e00> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key dataSource.'

    and the source code i change IN FSPagerView.swift open internal(set) dynamic var currentIndex: Int = 0 to @objc open internal(set) dynamic var currentIndex: Int = 0

    let scrollOffset = Double(contentOffset.divided(by: self.collectionViewLayout.itemSpacing)) to let scrollOffset = Double(contentOffset / self.collectionViewLayout.itemSpacing)

    IN FSPageControl.swift add case .leading: return 0 case .trailing: let contentWidth = diameter*CGFloat(self.numberOfPages) + CGFloat(self.numberOfPages-1)*spacing return contentView.frame.width - contentWidth } to open override func layoutSublayers(of layer: CALayer){}

    Thanks

    opened by csmarku 4
  • Custom Cell ?

    Custom Cell ?

    is there any way we can use custom cell instead of "FSPagerViewCell" ?

    I created custom class "slideCell" and inherited it from "FSPagerViewCell" but its not working

    class SliderCell: FSPagerViewCell { }

    opened by bilawal-liaqat 4
  • linear模式在最后一页删除最后一个元素时显示问题。

    linear模式在最后一页删除最后一个元素时显示问题。

    .linear 模式下在在最后一页删除最后一个元素时,attributes的计算正确,但是短时间内执行了两次,最后一次正确的执行结果并没有被页面刷新,可能是动画效果导致的。 解决方式: 在FSPagerView文件下修改 line478 为

        @objc(reloadData)
        open func reloadData() {
            self.collectionViewLayout.needsReprepare = true
            UIView.animate(withDuration: 0, animations: { self.reloadData() }, completion: { _ in })
        }
    
    
    opened by xdh725 0
  • Changing alpha in subclass of FSPagerViewTransformer changes mode from ferrisWheel to linear

    Changing alpha in subclass of FSPagerViewTransformer changes mode from ferrisWheel to linear

    Hi,

    I am subclassing FSPagerViewTransformer as following:

    `

    class CarouselPagerViewTransformer: FSPagerViewTransformer {

    init() {
        super.init(type: FSPagerViewTransformerType.ferrisWheel)
    }
    
    override func proposedInteritemSpacing() -> CGFloat {
        return 10.0
    }
    
    override func applyTransform(to attributes: FSPagerViewLayoutAttributes) {
        guard let pagerView = self.pagerView else {
            return
        }
        let position = attributes.position
        let scrollDirection = pagerView.scrollDirection
        
        guard scrollDirection == .horizontal else { return }
    
        var zIndex = 0
        var transform = CGAffineTransform.identity
        switch position {
        case -5 ... 5:
            let itemSpacing = attributes.bounds.width + self.proposedInteritemSpacing()
            let count: CGFloat = 14.0
            let circle: CGFloat = .pi * 2.0
            let radius = itemSpacing * count / circle
            let ty = radius
            let theta = circle / count
            let rotation = position * theta
            transform = transform.translatedBy(x: -position * itemSpacing, y: ty)
            transform = transform.rotated(by: rotation)
            transform = transform.translatedBy(x: 0, y: -ty)
            zIndex = Int((4.0 - abs(position) * 10))
        default:
            break
        }
        attributes.alpha = abs(position) > 1.0 ? 0.0 : 1.0 // changed from default
        attributes.transform = transform
        attributes.zIndex = zIndex
        
        
    }
    

    }

    ` However, changing the attributes.alpha from the default to other values (even constant 1) will make the pager view mode to linear instead of ferrisWheel. Could you please help me with this?

    opened by bluepixeltech 1
  • willDisplay cell: FSPagerViewCell, forItemAt index

    willDisplay cell: FSPagerViewCell, forItemAt index

    pagerView(_:willDisplay:forItemAt:) This function is called 2 time

    Expected a index, not two indexes, When the transformer is crossFading

        lazy var pagerView: FSPagerView = {
            let view = FSPagerView(frame: .zero)
            view.dataSource = self
            view.delegate = self
            view.register(ExploreBannerCell.self, forCellWithReuseIdentifier: ExploreBannerCell.defaultReuseIdentifier)
            view.isInfinite = true
            view.bounces = false
            view.automaticSlidingInterval = 3
            view.interitemSpacing = 0
            view.transformer = FSPagerViewTransformer(type: .crossFading)
            view.tg_width.equal(.fill)
            view.tg_height.equal(.fill)
            return view
        }()
    
    
    
    
    
    
    
        func pagerViewDidEndDecelerating(_ pagerView: FSPagerView) {
            logDebug("\(#function ) index: \(pagerView.currentIndex)")
        }
    
    
        func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) {
            logDebug("\(#function ) index: \(index)")
        }
    
        
        func pagerView(_ pagerView: FSPagerView, didEndDisplaying cell: FSPagerViewCell, forItemAt index: Int) {
            logDebug("\(#function ) index: \(index)")
        }
    
    
    2022-06-20 16:00:02.910161+0800 MetaRent[41044:7781035] pagerView(_:willDisplay:forItemAt:) index: 2
    2022-06-20 16:00:02.911786+0800 MetaRent[41044:7781016] pagerView(_:willDisplay:forItemAt:) index: 3
    2022-06-20 16:00:05.909641+0800 MetaRent[41044:7781030] pagerView(_:didEndDisplaying:forItemAt:) index: 0
    2022-06-20 16:00:05.910420+0800 MetaRent[41044:7781035] pagerView(_:didEndDisplaying:forItemAt:) index: 4
    2022-06-20 16:00:08.909986+0800 MetaRent[41044:7781030] pagerView(_:willDisplay:forItemAt:) index: 4
    2022-06-20 16:00:08.910604+0800 MetaRent[41044:7781016] pagerView(_:willDisplay:forItemAt:) index: 0
    2022-06-20 16:00:11.910524+0800 MetaRent[41044:7781035] pagerView(_:didEndDisplaying:forItemAt:) index: 1
    2022-06-20 16:00:11.911241+0800 MetaRent[41044:7781016] pagerView(_:didEndDisplaying:forItemAt:) index: 2
    2022-06-20 16:00:14.912001+0800 MetaRent[41044:7781016] pagerView(_:willDisplay:forItemAt:) index: 1
    2022-06-20 16:00:14.913418+0800 MetaRent[41044:7781030] pagerView(_:willDisplay:forItemAt:) index: 2
    2022-06-20 16:00:17.910743+0800 MetaRent[41044:7781035] pagerView(_:didEndDisplaying:forItemAt:) index: 3
    2022-06-20 16:00:17.911274+0800 MetaRent[41044:7781016] pagerView(_:didEndDisplaying:forItemAt:) index: 4
    2022-06-20 16:00:20.894267+0800 MetaRent[41044:7781016] pagerView(_:willDisplay:forItemAt:) index: 3
    2022-06-20 16:00:20.894750+0800 MetaRent[41044:7781030] pagerView(_:willDisplay:forItemAt:) index: 4
    2022-06-20 16:00:23.894119+0800 MetaRent[41044:7781030] pagerView(_:didEndDisplaying:forItemAt:) index: 0
    2022-06-20 16:00:23.894442+0800 MetaRent[41044:7781016] pagerView(_:didEndDisplaying:forItemAt:) index: 1
    2022-06-20 16:00:26.897322+0800 MetaRent[41044:7781016] pagerView(_:willDisplay:forItemAt:) index: 0
    2022-06-20 16:00:26.898987+0800 MetaRent[41044:7781035] pagerView(_:willDisplay:forItemAt:) index: 1
    2022-06-20 16:00:29.896391+0800 MetaRent[41044:7781030] pagerView(_:didEndDisplaying:forItemAt:) index: 2
    2022-06-20 16:00:29.896993+0800 MetaRent[41044:7781035] pagerView(_:didEndDisplaying:forItemAt:) index: 3
    2022-06-20 16:00:32.897715+0800 MetaRent[41044:7781030] pagerView(_:willDisplay:forItemAt:) index: 2
    2022-06-20 16:00:32.899324+0800 MetaRent[41044:7781033] pagerView(_:willDisplay:forItemAt:) index: 3
    2022-06-20 16:00:35.896129+0800 MetaRent[41044:7781030] pagerView(_:didEndDisplaying:forItemAt:) index: 4
    2022-06-20 16:00:35.896380+0800 MetaRent[41044:7781033] pagerView(_:didEndDisplaying:forItemAt:) index: 0
    
    
    
    opened by rgmyyw 0
  • willDisplay and didEndDisplaying's index are correct?

    willDisplay and didEndDisplaying's index are correct?

        func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) {
    
        }
    
        func pagerView(_ pagerView: FSPagerView, didEndDisplaying cell: FSPagerViewCell, forItemAt index: Int) {
    
        }
    
    opened by sugitatestblue 0
Owner
Wenchao Ding
"Never memorize what you can look up in books." - Albert Einstein ( https://en.wikiquote.org/wiki/Albert_Einstein )
Wenchao Ding
Lightweight custom collection view inspired by Airbnb.

ASCollectionView Lightweight custom collection view inspired by Airbnb. Screenshots Requirements ASCollectionView Version Minimum iOS Target Swift Ver

Abdullah Selek 364 Nov 24, 2022
Blueprints is a collection of flow layouts that is meant to make your life easier when working with collection view flow layouts.

Blueprints is a collection of flow layouts that is meant to make your life easier when working with collection view flow layouts. It comes

Christoffer Winterkvist 982 Dec 7, 2022
BouncyLayout is a collection view layout that makes your cells bounce.

BouncyLayout is a collection view layout that makes your cells bounce. Features Pure Swift 5. Works with every UICollectionView. Horizontal and vertic

Robert-Hein Hooijmans 4.2k Jan 5, 2023
An easy-to-use Collection View Layout for card-like animation.

CarLensCollectionViewLayout An easy-to-use Collection View Layout for card-like animation ?? CarLensCollectionViewLayout was created out of the implem

Netguru 530 Dec 16, 2022
iOS custom view to display books on shelf

ShelfView (iOS) iOS custom view to display books on shelf (Android version is available here) Requirements iOS 10.0+ Swift 4.2 Installation ShelfView

Adeyinka Adediji 268 Dec 10, 2022
UICollectionViewSplitLayout makes collection view more responsive.

UICollectionViewSplitLayout makes collection view more responsive. What's this? UICollectionViewSplitLayout is a subclass of UICollectionViewLayout. I

Yahoo! JAPAN 239 Dec 6, 2022
Declaretive UICollectionViewCompositionalLayout interface to implement complex collection view layout.

CompositionalLayoutViewController Example To run the example project, clone the repo, and run pod install from the Example directory first. Requiremen

ONEinc 19 Dec 2, 2022
Useful SwiftUI container view's. FittingGeometry, ScrollableView, LayoutReader, PageView, UIKitView. (iOS)

Containers Also available as a part of my SwiftUI+ Collection – just add it to Xcode 13+ Useful SwiftUI container view's for additional convenience. I

SwiftUI+ 32 Dec 27, 2022
FSPagerView is an elegant Screen Slide Library implemented primarily with UICollectionView.

FSPagerView is an elegant Screen Slide Library implemented primarily with UICollectionView. It is extremely helpful for making Banner、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders.

Wenchao Ding 6.7k Jan 2, 2023
A minimalistic looking banner library for iOS. It supports multiple customizable kinds of Banner types

A minimalistic looking banner library for iOS. It supports multiple customizable kinds of Banner types

Emre Armagan 12 Oct 10, 2022
An e-commerce app with some function: searching, like product, demo paying and view product

Emarket_060921 An e-commerce app with some function: searching, like product, demo paying and view product. I have developed this app all by myself, b

null 0 Jan 17, 2022
An Application to list the products and on selection of product list the detail of particular product

Merchandising An Application to list the products and on selection of product list the detail of particular product This application uses VIPER design

Poonam Yadav 0 Nov 28, 2021
Marshroute is an iOS Library for making your Routers simple but extremely powerful

Marshroute Contents Overview Detailes Tuning the transition animation 3d touch support PeekAndPopUtility Peek and pop state observing Demo Requirement

avito.tech 215 Jan 4, 2023
Pendo captures product usage data, gathers user feedback, and lets you communicate in-app to onboard, educate, and guide users to value

Pendo SDK for IOS The Pendo Mobile SDK is a code-less, retro-active analytics collector across all of your app's versions. The SDK also allows present

Pendo 30 Jan 4, 2023
Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.

SlideController is a simple and flexible UI component fully written in Swift. Built using power of generic types, it is a nice alternative to UIPageVi

Touchlane 409 Dec 6, 2022
Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.

SlideController is a simple and flexible UI component fully written in Swift. Built using power of generic types, it is a nice alternative to UIPageVi

Touchlane 411 Jan 5, 2023
A Slide Menu, written in Swift, inspired by Slide Menu Material Design

Swift-Slide-Menu (Material Design Inspired) A Slide Menu, written in Swift 2, inspired by Navigation Drawer on Material Design (inspired by Google Mat

Boisney Philippe 90 Oct 17, 2020
Slide-Menu - A Simple Slide Menu With Swift

Slide Menu!! Весь интерфейс создан через код

Kirill 0 Jan 8, 2022
Present a sheet ViewController easily and control ViewController height with pangesture

PanControllerHeight is designed to present a sheet ViewController easily and control ViewController height with pangesture.

null 2 May 3, 2022
HomeWork3.2 - How to work with sliders, textfield, keyboard, view

HomeWork3.2 How to work with sliders, textfield, keyboard, view

Artur 1 Jan 26, 2022