Android PagerTabStrip for iOS.

Overview

XLPagerTabStrip

Build status Platform iOS Swift 5 compatible Carthage compatible CocoaPods compatible License: MIT

Made with ❀️ by XMARTLABS.

Android PagerTabStrip for iOS!

πŸ‘‰ Looking for a SwiftUI version? Check out PagerTabStripView, it's fully written in pure SwiftUI. πŸ‘ˆ

XLPagerTabStrip is a Container View Controller that allows us to switch easily among a collection of view controllers. Pan gesture can be used to move on to next or previous view controller. It shows a interactive indicator of the current, previous, next child view controllers.

Getting involved

  • If you want to contribute please feel free to submit pull requests.
  • If you have a feature request please open an issue.
  • If you found a bug or need help please check older issues, FAQ and threads on StackOverflow (Tag 'XLPagerTabStrip') before submitting an issue.

Before contribute check the CONTRIBUTING file for more info.

If you use XLPagerTabStrip in your app we would love to hear about it! Drop us a line on twitter.

Pager Types

The library provides 4 different ways to show the view controllers.

Button Bar

This is likely the most common pager type. It's used by many well-known apps such as instagram, youtube, skype, and many others.

Bar

This mode doesn't show a title neither an image. It only shows a bar that indicates the current view controller.

Twitter

A long time ago, the twitter app made use of this type of pager in the app main screen.

Segmented

This mode uses a UISegmentedControl to indicate which view controller is being displayed.

Usage

Basically, we just need to provide the list of child view controllers to show, and these view controllers should provide the information (title or image) that will be shown in the associated indicator.

Let's see the steps to do this:

Choose which type of pager we want to create

First, we must choose the type of pager we want to create. Depending on our choice, we will have to create a view controller that extends from one of the following controllers: TwitterPagerTabStripViewController, ButtonBarPagerTabStripViewController, SegmentedPagerTabStripViewController, BarPagerTabStripViewController.

All these built-in pager controllers extend from the base class PagerTabStripViewController. You can also make your custom pager controller by extending directly from PagerTabStripViewController in the event that no pager menu type fits your needs.

import XLPagerTabStrip

class MyPagerTabStripName: ButtonBarPagerTabStripViewController {
  ..
}
Connect outlets and add layout constraints

We strongly recommend using IB to set up our page controller views.

Drag a UIViewController into the storyboard and set up its class with your pager controller (MyPagerTabStripName). Drag a UIScrollView into your view controller view and connect PagerTabStripViewController containerView outlet with the scroll view.

Depending on which type of paging view controller you are working with you may have to connect more outlets.

For BarPagerTabStripViewController, we should connect barView outlet. barView type is UIView. ButtonBarPagerTabStripViewController requires us to connect buttonBarView outlet. buttonBarView type is ButtonBarView which extends from UICollectionView. SegmentedPagerTabStripViewController has a segmentedControl outlet; if the outlet is not connected the library try to set up the navigationItem titleView property using a UISegmentedControl. TwitterPagerTabStripViewController doesn't require us to connect any additional outlet.

The example project contains a example for each pager controller type and we can look into it to see how views were added and how outlets were connected.

Provide the view controllers that will appear embedded into the PagerTabStrip view controller

You can provide the view controllers by overriding func viewControllers(for: pagerTabStripController: PagerTabStripViewController) -> [UIViewController] method.

override public func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
  return [MyEmbeddedViewController(), MySecondEmbeddedViewController()]
}

The method above is the only method declared in PagerTabStripDataSource protocol. We don't need to explicitly conform to it since base pager class already does it.

Provide information to show in each indicator

Every UIViewController that will appear within the PagerTabStrip needs to provide either a title or an image. In order to do so they should conform to IndicatorInfoProvider by implementing func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo which provides the information required to show the PagerTabStrip menu (indicator) associated with the view controller.

class MyEmbeddedViewController: UITableViewController, IndicatorInfoProvider {

  func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
    return IndicatorInfo(title: "My Child title")
  }
}

For a detailed step-by-step guide about how to use the library, please check out this community blog post.

That's it! We're done! 🍻 🍻

Customization

Pager Behaviour

The pager indicator can be updated progressive as we swipe or at once in the middle of the transition between the view controllers. By setting up pagerBehaviour property we can choose how the indicator should be updated.

public var pagerBehaviour: PagerTabStripBehaviour
public enum PagerTabStripBehaviour {
    case common(skipIntermediteViewControllers: Bool)
    case progressive(skipIntermediteViewControllers: Bool, elasticIndicatorLimit: Bool)
}

Default Values:

// Twitter Type
PagerTabStripBehaviour.common(skipIntermediateViewControllers: true)
// Segmented Type
PagerTabStripBehaviour.common(skipIntermediateViewControllers: true)
// Bar Type
PagerTabStripBehaviour.progressive(skipIntermediateViewControllers: true, elasticIndicatorLimit: true)
// ButtonBar Type
PagerTabStripBehaviour.progressive(skipIntermediateViewControllers: true, elasticIndicatorLimit: true)

As you might have noticed, common and progressive enumeration cases have skipIntermediateViewControllers and elasticIndicatorLimit associated values.

skipIntermediateViewControllers allows us to skip intermediate view controllers when a tab indicator is tapped.

elasticIndicatorLimit allows us to tension the indicator when we reach a limit, I mean when we try to move forward from last indicator or move back from first indicator.

PagerTabStripDelegate & PagerTabStripIsProgressiveDelegate

Normally we don't need to implement these protocols because each pager type already conforms to it in order to properly update its indicator. However, there may be some scenarios when overriding a method may come in handy.

public protocol PagerTabStripDelegate: class {

    func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int)
}

public protocol PagerTabStripIsProgressiveDelegate : PagerTabStripDelegate {

    func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool)
}

Again, the method invoked by the library depends on the pagerBehaviour value.

ButtonBar Customization

settings.style.buttonBarBackgroundColor: UIColor?
// buttonBar minimumInteritemSpacing value, note that button bar extends from UICollectionView
settings.style.buttonBarMinimumInteritemSpacing: CGFloat?
// buttonBar minimumLineSpacing value
settings.style.buttonBarMinimumLineSpacing: CGFloat?
// buttonBar flow layout left content inset value
settings.style.buttonBarLeftContentInset: CGFloat?
// buttonBar flow layout right content inset value
settings.style.buttonBarRightContentInset: CGFloat?

// selected bar view is created programmatically so it's important to set up the following 2 properties properly
settings.style.selectedBarBackgroundColor = UIColor.black
settings.style.selectedBarHeight: CGFloat = 5

// each buttonBar item is a UICollectionView cell of type ButtonBarViewCell
settings.style.buttonBarItemBackgroundColor: UIColor?
settings.style.buttonBarItemFont = UIFont.systemFont(ofSize: 18)
// helps to determine the cell width, it represent the space before and after the title label
settings.style.buttonBarItemLeftRightMargin: CGFloat = 8
settings.style.buttonBarItemTitleColor: UIColor?
// in case the barView items do not fill the screen width this property stretch the cells to fill the screen
settings.style.buttonBarItemsShouldFillAvailiableWidth = true
// only used if button bar is created programmatically and not using storyboards or nib files as recommended.
public var buttonBarHeight: CGFloat?

Important: Settings should be called before viewDidLoad is called.

override func viewDidLoad() {
   self.settings.style.selectedBarHeight = 2
   self.settings.style.selectedBarBackgroundColor = UIColor.white

   super.viewDidLoad()
}
Update cells when selected indicator changes

We may need to update the indicator cell when the displayed view controller changes. The following function properties help to accomplish that. Depending on our pager pagerBehaviour value we will have to set up changeCurrentIndex or changeCurrentIndexProgressive.

public var changeCurrentIndex: ((oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, animated: Bool) -> Void)?
public var changeCurrentIndexProgressive: ((oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void)?

Let's see an example:

changeCurrentIndexProgressive = { (oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void in
    guard changeCurrentIndex == true else { return }

    oldCell?.label.textColor = UIColor(white: 1, alpha: 0.6)
    newCell?.label.textColor = UIColor.white

    if animated {
        UIView.animate(withDuration: 0.1, animations: { () -> Void in
            newCell?.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            oldCell?.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
        })
    }
    else {
        newCell?.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
        oldCell?.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
    }
}

Bar Type Customization

settings.style.barBackgroundColor: UIColor?
settings.style.selectedBarBackgroundColor: UIColor?
// barHeight is only set up when the bar is created programmatically and not using storyboards or xib files as recommended.
settings.style.barHeight: CGFloat = 5

Twitter Type Customization

settings.style.dotColor = UIColor(white: 1, alpha: 0.4)
settings.style.selectedDotColor = UIColor.white
settings.style.portraitTitleFont = UIFont.systemFont(ofSize: 18)
settings.style.landscapeTitleFont = UIFont.systemFont(ofSize: 15)
settings.style.titleColor = UIColor.white

Segmented Type Customization

settings.style.segmentedControlColor: UIColor?

Requirements

  • iOS 9.3+
  • Xcode 10.2+

Examples

Follow these 3 steps to run Example project: Clone XLPagerTabStrip repository, open XLPagerTabStrip workspace and run the Example project.

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects.

To install XLPagerTabStrip, simply add the following line to your Podfile:

pod 'XLPagerTabStrip', '~> 9.0'

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa.

To install XLPagerTabStrip, simply add the following line to your Cartfile:

github "xmartlabs/XLPagerTabStrip" ~> 9.0

FAQ

How to change the visible child view controller programmatically

PagerTabStripViewController provides the following methods to programmatically change the visible child view controller:

func moveToViewController(at index: Int)
func moveToViewController(at index: Int, animated: Bool)
func moveTo(viewController: UIViewController)
func moveTo(viewController: UIViewController, animated: Bool)

How to migrate from Swift 2 to Swift 3

Check out our migration guide

Author

Change Log

This can be found in the CHANGELOG.md file.

Comments
  • Update to Swift 4

    Update to Swift 4

    Before submitting issues ...

    • Make sure you are using XLPagerTabStrip latest release or master branch version.
    • Make sure your Xcode version is the latest stable one.
    • Check if the issue was already reported or fixed. We add labels to each issue in order to easily find related issues. If you found a match add a brief comment "I have the same problem" or "+1".
    • Please do not use the issue tracker for personal support requests. Stack Overflow is a better place for that where a wider community can help you!

    When submitting issues, please provide the following information to help maintainers to fix the problem faster:

    • Environment: XLPagerTabStrip, Xcode and iOS version you are using.
    • In case of reporting errors, provide Xcode console output of stack trace or code compilation error.
    • Any other additional detail such as example code that you think it would be useful to understand, reproduce and solve the problem.
    opened by keyhan76 25
  • Linker Error message when compiling with xCode 8 when using Carthage

    Linker Error message when compiling with xCode 8 when using Carthage

    Hi I'm using version form Swift3 branch and when I try to compile with xCode 8 I got:

    "direct field offset for XLPagerTabStrip.ButtonBarPagerTabStripViewController.(buttonBarView.storage in _0CF27031E34C35EB5EAF50A7E0F72A93) : XLPagerTabStrip.ButtonBarView!?", referenced from: XLPagerTabStrip.ButtonBarPagerTabStripViewController.buttonBarView.setter : XLPagerTabStrip.ButtonBarView! in PGMediaContainerViewController.o

    How can I get rid of this error so the compilation will finish with success ?

    opened by MichalAlgor 22
  • View Controller Stretched

    View Controller Stretched

    Anyone is experiencing view controllers being stretched? When I select the a tab for the first time, the view is stretched, but if I click in something (like search bar), the view controller becomes normal.

    PS: This don't happen with the first view controller (first item on tab) for some reason...

    Stretched width:

    When I click on search bar, for example, the width becomes normal:

    opened by jhkersul 18
  • There will be wide space under buttonBarView when swipe to switch view controllers

    There will be wide space under buttonBarView when swipe to switch view controllers

    Hi,

    Recently, I updated to Swift 3 and upgrading to XLPagerTabStrip 6.0.0. I am using Xcode 8 and Swift 3.0.2 based codebase. And I found if I swipe to switch view controllers from left to right or from right to left, there was wide space under buttonBarView, like the red box in image below indicated, however, clicking items in buttonBarView would not cause such phenomenon. I tried to trace the containerView's content size, the "y" offset changed to -64 when using swipe, which is expected to be 0, so I think this would be the reason why there was wide space under buttonBarView. Then I wonder how this issue can be solved. Can someone be helpful, and I will be grateful.

    Thanks!

    iphone7plus type: awaiting response 
    opened by imadeit 16
  • How to go to a specific child view controller

    How to go to a specific child view controller

    Hello,

    I have 5 child viewcontroller. When in one of them I go to another view. From that view I want to be able to go back to that child viewcontroller (the one that I came from)

    Do you know how I can do to to go to a specific viewcontroller?

    Thank you for your attention.

    All the best.

    type: question 
    opened by pmendiburu 16
  • Can't connect 'containerView' and 'buttonBarView' outlets

    Can't connect 'containerView' and 'buttonBarView' outlets

    Hi! I'm trying to connect the outlets for containerView and buttonBarView, but this outlets doesn't exists on my class, only on it's parent (BaseButtonBarPagerTabStripViewController). But I can't connect, it just doesn't work.

    How can I proceed?

    screen shot 2016-03-11 at 2 53 36 pm type: question 
    opened by jhkersul 15
  • buttonBarView not show in ios 10.3.3

    buttonBarView not show in ios 10.3.3

    in ios 11 iphone 6 , buttonbarview showing img_934e196d52e1-1

    but in ios 10.3.3 iphone 5s img_0652

    I am confusing with it.I am use xlpagertabstrip 8.0 xcode 9.0. anyone can help me? thanks

    opened by huongtran84 14
  • ButtonBar style doesn't fill entire width

    ButtonBar style doesn't fill entire width

    I'm really confused by the documentation. I don't see any way without specifically setting a fixed value for self.settings.style.buttonBarItemLeftRightMargin to make the ButtonBar actually take up the full width like the examples in the README.

    All four of the animated .gif files at the top have the bar straight across with the tabs justifying to fill the entire width.

    Then the animated .gif for ButtonBar looks nothing like them and the one that does (Bar) has no text...

    Really confused why there's isn't a way to get a combination of the two?

    docs type: awaiting response 
    opened by bdrelling 14
  • Bar does not show up anymore

    Bar does not show up anymore

    After upgrading my Xcode to 8.0 and my project to Swift 2.3, the Bar indicating the current view controller in my Bar Button Pager does not show up in 2 out of the 3 places in which I use this feature. As far as I can tell, they are all configured the same except for slight variation in sizing of the height of the Button Bar View.

    I can still see the Indicator titles and functionality is fine.

    opened by Raymond26 14
  • How to remove gap between button bar view and container view?

    How to remove gap between button bar view and container view?

    Hello everyone. I founded the problem when I implement ButtonBarPagerTabStripViewController. I founded gap between button bar view and scroll view (container view) because I embed navigation bar to the view but when I remove navigation bar it's display perfectly. How does I solve it?

    gap-problem

    opened by dax-patuma 14
  • I've made the class of BaseButtonBarPagerTabStripViewController, connected containerview and buttonbarview outlets and receive this error:

    I've made the class of BaseButtonBarPagerTabStripViewController, connected containerview and buttonbarview outlets and receive this error:

    2016-06-13 18:24:36.765 PotSpot[1872:35255] Unknown class _TtC7PotSpot14MenuController in Interface Builder file. 2016-06-13 18:24:36.777 PotSpot[1872:35255] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x7f8970c380a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key buttonBarView.' *** First throw call stack: ( 0 CoreFoundation 0x0000000106f2cd85 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000108f11deb objc_exception_throw + 48 2 CoreFoundation 0x0000000106f2c9c9 -[NSException raise] + 9 3 Foundation 0x00000001072fe19b -[NSObject(NSKeyValueCoding) setValue:forKey:] + 288 4 UIKit 0x0000000107b28d0c -[UIViewController setValue:forKey:] + 88 5 UIKit 0x0000000107d5f7fb -[UIRuntimeOutletConnection connect] + 109 6 CoreFoundation 0x0000000106e66890 -[NSArray makeObjectsPerformSelector:] + 224 7 UIKit 0x0000000107d5e1de -[UINib instantiateWithOwner:options:] + 1864 8 UIKit 0x0000000107b2f8d6 -[UIViewController _loadViewFromNibNamed:bundle:] + 381 9 UIKit 0x0000000107b30202 -[UIViewController loadView] + 178 10 UIKit 0x0000000107b30560 -[UIViewController loadViewIfRequired] + 138 11 UIKit 0x0000000107b30cd3 -[UIViewController view] + 27 12 UIKit 0x0000000107b8320c -[UINavigationController preferredContentSize] + 194 13 UIKit 0x0000000107b07712 -[UIPresentationController preferredContentSizeDidChangeForChildContentContainer:] + 59 14 UIKit 0x0000000107b03aa0 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 95 15 UIKit 0x00000001079a1f62 _runAfterCACommitDeferredBlocks + 317 16 UIKit 0x00000001079b5e4c _cleanUpAfterCAFlushAndRunDeferredBlocks + 95 17 UIKit 0x00000001079c2147 _afterCACommitHandler + 90 18 CoreFoundation 0x0000000106e51c37 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 23 19 CoreFoundation 0x0000000106e51ba7 __CFRunLoopDoObservers + 391 20 CoreFoundation 0x0000000106e477fb __CFRunLoopRun + 1147 21 CoreFoundation 0x0000000106e470f8 CFRunLoopRunSpecific + 488 22 GraphicsServices 0x000000010c660ad2 GSEventRunModal + 161 23 UIKit 0x0000000107995f09 UIApplicationMain + 171 24 PotSpot 0x0000000106b10a22 main + 114 25 libdyld.dylib 0x000000010ae2592d start + 1 26 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException

    type: issue 
    opened by bars395 14
  • Make it possible for Obj-C view controller to implement IndicatorInfoProvider protocol

    Make it possible for Obj-C view controller to implement IndicatorInfoProvider protocol

    In order to display a View Controller (VC) as a child of a Pager controller, the child VC needs to conform to the IndicatorInfoProvider protocol in order to let the pager know what to use as the VC's title in the pager.

    However, if a VC is written in Obj-C, it is currently impossible to have it as a child of a pager because the IndicatorInfoProvider protocol isn't made available to Obj-C. In order to make it available, the following minor changes have been made:

    • Added the @objc flag to the protocol
    • Structs don't exist in Obj-C, but the protocol function returns a struct. Refactored its return type to be a Class instead of a Struct.
    opened by oduwa 0
  • Code refresh + SPM support

    Code refresh + SPM support

    Updated source code to remove warnings and use clang instead of GCC. Upgraded support to iOS 11 and added support for SPM. Also, weak IBOutlets are not recommended by Apple since 2015, so I removed the keyword when not necessary. Moved FXPageControl to a dependency (PR to the main repo pending: https://github.com/nicklockwood/FXPageControl/pull/24) Fixed deprecated code concerning window orientation.

    I know there is already this good PR https://github.com/xmartlabs/XLPagerTabStrip/pull/846 aiming to bring support to SPM, but I think this lib needed a deeper refresh to remove some deprecations.

    opened by Climbatize 0
  • Swift Package Manager

    Swift Package Manager

    Any chance to add the required package.swift so that we can install the library through Swift Package Manager? This is the last package of my app for which I a, keeping Cocoa Pod

    opened by erwanmace 2
  • Support Swift Package Manager

    Support Swift Package Manager

    Motivation

    want to use Swift Package Manager

    Related issues

    • #771
    • #818

    Changed

    • Support Swift Package
      • Add Package.swift
      • ButtonBarViewCell load nib file divide from spm
    • Divide FXPageControl files and package
      • Add FXPageControl.podspec. and add dependency for XLPagerTabStrip.podspec

    TODO

    • [ ] add SPM installation for README
    opened by nk-5 1
Releases(9.0.0)
Owner
xmartlabs
xmartlabs
RAMAnimatedTabBarController is a Swift UI module library for adding animation to iOS tabbar items and icons. iOS library made by @Ramotion

ANIMATED TAB BAR Swift UI module library for adding animation to iOS tabbar items and icons.

Ramotion 11k Jan 8, 2023
:octocat: AdaptiveController is a 'Progressive Reduction' Swift UI module for adding custom states to Native or Custom iOS UI elements. Swift UI component by @Ramotion

ADAPTIVE TAB BAR 'Progressive Reduction' module for adding custom states to Native or Custom UI elements. We specialize in the designing and coding of

Ramotion 2k Nov 9, 2022
A fun, easy-to-use tab bar navigation controller for iOS.

CircleBar Don’t you, sometimes, miss fun user interfaces? Truth is, we do. Sure, you can't use them in enterprise apps for obvious reasons, but if you

softhaus 786 Dec 25, 2022
youtube iOS app template written in swift 5

Youtube iOS Template Youtube iOS Template is developed by Haik Aslanyan and written in Swift 3. Purpose of this repo is to show how ViewControllers ca

Henry Aslanyan 2.5k Jan 4, 2023
A custom tab bar controller for iOS.

ESTabBarController ESTabBarController is a custom tab bar controller for iOS. It has a tab indicator that moves animated along the bar when switching

null 122 Oct 6, 2022
Another UITabBar & UITabBarController (iOS Tab Bar) replacement, but uses Auto Layout for arranging it's views hierarchy.

GGTabBar GGTabBar is a simple UITabBar & UITabBarController replacement that uses Auto Layout for constructing the GUI. I created it for curiosity, bu

Nicolas Goles 157 Sep 26, 2022
A custom tab bar controller for iOS written in Swift 4.2

A custom tab bar controller for iOS written in Swift 4.0 Screenshots Installation Cocoa Pods: pod 'AZTabBar' Swift Package Manager: You can use The Sw

Antonio Zaitoun 335 Dec 11, 2022
πŸ› WormTabStrip ViewPager for iOS written in Swift, which gives continuous feedback to the user when scrolling

Worm Tab Strip Worm Tab Strip is inspired by android SmartTabStrip, android view pager like library for iOS written in swift. Basically it was build u

EzimetYusup 176 Dec 13, 2022
Customisable iOS bottom menu works like Tabbar

SSCustomTabMenu Simple customizable iOS bottom menu works like Tabbar, in Swift. Features Simple and customizable iOS Tab Menu items, in Swift. Requir

Simform Solutions 81 Aug 3, 2022
Smooth customizable tabs for iOS apps.

SmoothTab Requirements iOS 11.0+ Swift 5.x Xcode 10+ Installation CocoaPods pod 'SmoothTab' How to use Complete screen To setup and customize the comp

Yervand Saribekyan, iOS Dev 105 Feb 13, 2022
iOS Top Tab Navigation

iOS-Top-Tab-Navigation Good news for all our users out there! Now there are no boundaries to your convenience, you can pass as much words as you want

MindInventory 14 Aug 3, 2022
Android/iOS Apps created to practice with different iOS/Android Tech. These apps were built to have similar feature sets using native Android/iOS.

AgilityFitTodayApp Android/iOS Apps created to practice with different iOS/Android Tech. These apps were built to have similar feature sets using nati

Lauren Yew 1 Feb 25, 2022
Ported scrcpy for mobile platforms, to remotely control Android devices on your iPhone or Android phone.

scrcpy-mobile Ported scrcpy for mobile platforms, to remotely control Android devices on your iPhone or Android phone. Currently only supports control

Ethan 140 Jan 2, 2023
🎈 Curated collection of advanced animations that I have developed using (Swift UI for iOS) and (React Native for iOS/Android). Source code is intended to be reused by myself for future projects.

?? Curated collection of advanced animations that I have developed using (Swift UI for iOS) and (React Native for iOS/Android). Source code is intended to be reused by myself for future projects.

Artem Moshnin 5 Apr 3, 2022
iOS's Stocks App clone written in React Native for demo purpose (available both iOS and Android).

FinanceReactNative iOS's Stocks App clone written in React Native for demo purpose (available both iOS and Android). Data is pulled from Yahoo Finance

kf 2k Dec 29, 2022
Input Mask is an Android & iOS native library allowing to format user input on the fly.

Migration Guide: v.6 This update brings breaking changes. Namely, the autocomplete flag is now a part of the CaretGravity enum, thus the Mask::apply c

red_mad_robot 548 Dec 20, 2022
Discover recent and popular movies on iOS and Android

PopularMovies Description This application help users discover popular and recent movies using TMDb API. Android Installation Obtain an TMDb API Key.

Ivan Magda 15 Feb 10, 2022
ImagePalette - Swift/iOS port of Android's Palette

ImagePalette - Swift/iOS port of Android's Palette

Shaun Harrison 54 Sep 23, 2022
Tutorial GraphQL + Node Express + MySQL, and sample for Android / iOS client

GraphQL-tutorial Tutorial for GraphQL + Node Express + MySQL, and sample for Android / iOS client Blog NeoRoman's GraphQL-tutorial (Korean) Materials

Henry Kim 4 Oct 20, 2022
Validate iOS, Android, and Mac localizations. Find errors in .strings, .stringsdict, and strings.xml files.

Locheck An Xcode and Android localization file validator. Make sure your .strings, .stringsdict, and strings.xml files do not have any errors! What do

Asana 73 Dec 13, 2022