SwiftyUI alternatives and similar libraries
Based on the "UI" category.
Alternatively, view SwiftyUI alternatives based on common mentions on social networks and blogs.
-
Lottie
An iOS library to natively render After Effects vector animations -
iCarousel
A simple, highly customisable, data-driven 3D carousel for iOS and Mac OS -
IQKeyboardManager
Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. -
SVProgressHUD
A clean and lightweight progress HUD for your iOS and tvOS app. -
AsyncDisplayKit
Smooth asynchronous user interfaces for iOS apps. -
DZNEmptyDataSet
A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display -
IGListKit
A data-driven UICollectionView framework for building fast and flexible lists. -
FSCalendar
A fully customizable iOS calendar library, compatible with Objective-C and Swift -
TTTAttributedLabel
A drop-in replacement for UILabel that supports attributes, data detectors, links, and more -
animated-tab-bar
:octocat: RAMAnimatedTabBarController is a Swift UI module library for adding animation to iOS tabbar items and icons. iOS library made by @Ramotion -
folding-cell
:octocat: 📃 FoldingCell is an expanding content cell with animation made by @Ramotion -
NVActivityIndicatorView
A collection of awesome loading animations -
SkeletonView
☠️ An elegant way to show users that something is happening and also prepare them to which contents they are awaiting -
LTMorphingLabel
[EXPERIMENTAL] Graceful morphing effects for UILabel written in Swift. -
MGSwipeTableCell
An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of transitions. -
SWTableViewCell
An easy-to-use UITableViewCell subclass that implements a swippable content view which exposes utility buttons (similar to iOS 7 Mail Application) -
SwiftMessages
A very flexible message bar for iOS written in Swift. -
JTAppleCalendar
The Unofficial Apple iOS Swift Calendar View. Swift calendar Library. iOS calendar Control. 100% Customizable -
XLForm
XLForm is the most flexible and powerful iOS library to create dynamic table-view forms. Fully compatible with Swift & Obj-C. -
ViewAnimator
ViewAnimator brings your UI to life with just one line -
JVFloatLabeledTextField
UITextField subclass with floating labels - inspired by Matt D. Smith's design: http://dribbble.com/shots/1254439--GIF-Mobile-Form-Interaction?list=users -
TPKeyboardAvoiding
A drop-in universal solution for moving text fields out of the way of the keyboard in iOS -
FSPagerView
FSPagerView is an elegant Screen Slide Library. It is extremely helpful for making Banner View、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders. -
SVPullToRefresh
Give pull-to-refresh & infinite scrolling to any UIScrollView with 1 line of code. -
AMScrollingNavbar
Scrollable UINavigationBar that follows the scrolling of a UIScrollView -
Koloda
KolodaView is a class designed to simplify the implementation of Tinder like cards on iOS. -
SwipeCellKit
Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift. -
Alerts & Pickers
Advanced usage of UIAlertController and pickers based on it: Telegram, Contacts, Location, PhotoLibrary, Country, Phone Code, Currency, Date... -
SCLAlertView-Swift
Beautiful animated Alert View. Written in Swift -
Macaw
Powerful and easy-to-use vector graphics Swift library with SVG support -
TextFieldEffects
Custom UITextFields effects inspired by Codrops, built using Swift -
ViewDeck
An implementation of the sliding menu found in various iOS apps. -
SwiftEntryKit
SwiftEntryKit is a presentation library for iOS. It can be used to easily display overlays within your iOS apps. -
PageMenu
A paging menu controller built from other view controllers placed inside a scroll view (like Spotify, Windows Phone, Instagram) -
Material Components
[In maintenance mode] Modular and customizable Material Design UI components for iOS -
SideMenu
Simple side/slide menu control for iOS, no code necessary! Lots of customization. Add it to your project in 5 minutes or less. -
SWRevealViewController
A UIViewController subclass for presenting side view controllers inspired on the FaceBook and Wunderlist apps, done right ! -
expanding-collection
:octocat: ExpandingCollection is an animated material design UI card peek/pop controller. iOS library made by @Ramotion -
CSStickyHeaderFlowLayout
UICollectionView replacement of UITableView. Do even more like Parallax Header, Sticky Section Header. Made for iOS 7.
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of SwiftyUI or a related project?
README
SwiftyUI 
High performance and lightweight UIView, UIImage, UIImageView, UIlabel, UIButton and more.
Features
- [x] SwiftyView GPU rendering Image and Color
- [x] SwiftyColor — color from Hex, colorRGBA value from UIColor, colors from Image
- [x] UIImage Extensions for Inflation / Scaling / Rounding
- [x] Auto-Purging In-Memory Image Cache
- [x] SwiftyImageView extension 10+ animations
- [x] SwiftyImageView 150% High performance more than UIImageView, depending on UIView-package, Image-GPU and Image-Cache
- [x] SwiftyLabel 300% High performance more than UIlabel, depending on UIView-package and TextKit
- [x] SwiftyButton 300% High performance more than UIButton, depending on UIControl-package, TextKit and BackgroundImage-Advanced
- [x] SwiftyToast is depend on globalCenter and show the toast without overlap.
- [x] SwiftyAlert contains SuccessAlert, ErrorAlert, WarningAlert, InfoAlert, EditAlert and their special styles.
- [x] lightweight, almost one class for each UI
- [x] UI loading thread-safe
- [x] Block-Package to more easy to use
- [x] Easy and simple to use, all APIs are same to system APIs
- [x] SwiftyThreadPool auto manage threads depends on active CPUs, and autorelease Runloop inside
- [x] SwiftyPromise is a lightweight version of PromiseKit, based partially on Javascript's A+ spec, depends on ThreadPool, an interesting feature is that it can
then
on both main thread and background in one Promise.
Requirements
- iOS 8.0+
- Xcode 9.0+
- Swift 5.0+
Communication
- If you found a bug, open an issue.
- If you have a feature request, open an issue.
- If you want to contribute, submit a pull request.
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 integrate SwiftyUI 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 '<Your Target Name>' do
pod 'SwiftyUI'
end
Then, run the following command:
$ pod install
Usage
SwiftyView
SwiftyView have a auto GPU rendering on color and Image showing.
import SwiftyUI
let myView : SwiftyView = SwiftyView().addTo(view)
myView.frame = CGRect.init(x: 50, y: 50, width: 100, height: 100)
You can also invoke UIView function directly, it also have most of the SwiftyView performance feature.
But if you want to have complete benefits, I suggest you to use SwiftyView, and it actually inherits from UIView.
let myView : UIView = UIView()
view.addSubview(myView)
myView.frame = CGRect.init(x: 50, y: 50, width: 100, height: 100)
SwiftyColor
color from Hex
colorRGBA value from UIColor
import SwiftyUI
let myColor: UIColor = .hex(0xccff00) // .hex("333399")
let redFloat: CGFloat = myColor.redValue //greenValue, blueValue, alphaValue
colors from Image, also return block is on main thread:
import SwiftyUI
myImage?.colors({ (background, primary, secondary, detail) in
print("background color: \(background)")
print("primary color: \(primary)")
print("secondary color: \(secondary)")
print("detail color: \(detail)")
})
UIImage Extensions
There are several UIImage
extensions designed to make the common image manipulation operations as simple as possible.
Inflation
let myImage : UIImage? = UIImage.load("aImage")
myImage.inflate()
Inflating compressed image formats (such as PNG or JPEG) in a background queue can significantly improve drawing performance on the main thread.
Scaling
let myImage : UIImage? = UIImage.load("aImage")
let size = CGSize(width: 100.0, height: 100.0)
let scaledImage = myImage.reSize(to: size)
let scaledToFitImage = myImage.reSize(toFit: size)
let scaledToFillImage = myImage.reSize(toFill: size)
Rounded Corners
let myImage : UIImage? = UIImage.load("aImage")
let radius: CGFloat = 10.0
let roundedImage = myImage.rounded(withCornerRadius: radius)
let circularImage = myImage.roundedIntoCircle()
Image Cache
The ImageCachePool
in SwiftyUI fills the role of that additional caching layer. It is an in-memory image cache used to store images up to a given memory capacity. When the memory capacity is reached, the image cache is sorted by last access date, then the oldest image is continuously purged until the preferred memory usage after purge is met. Each time an image is accessed through the cache, the internal access date of the image is updated.
let imageCachePool : ImageCachePool = .defalut
Add / Remove / Fetch Images
Interacting with the ImageCache
protocol APIs is very straightforward.
let imageCachePool : ImageCachePool = .defalut
let myImage : UIImage? = UIImage.load("aImage")
imageCachePool.add(myImage, withIdentifier: "myImage")
let cachedMyImage = imageCachePool.image(withIdentifier: "myImage")
imageCachePool.removeImage(withIdentifier: "myImage")
SwiftyImageView
SwiftyImagView inherits from UIView and ImageSettable Protocol and its extension. Also has a better performance.Yet to provide the foundation of the SwiftyImagView
extension. Due to the powerful support of these classes, protocols and extensions, the SwiftyImagView
APIs are concise, easy to use and contain a large amount of functionality.
let myImage : UIImage? = UIImage.load("btnBG")
let myImageView : SwiftyImageView = SwiftyImageView(myImage).addTo(view)
myImageView.frame = CGRect.init(x: 50, y: 150 + 20, width: 100, height: 100)
SwiftyImageView Image Transitions
By default, there is no image transition animation when setting the image on the image view. If you wish to add a cross dissolve or flip-from-bottom animation, then specify an ImageTransition
with the preferred duration.
let myImage : UIImage? = UIImage.load("btnBG")
let myImageView : SwiftyImageView = SwiftyImageView(myImage).addTo(view)
myImageView.frame = CGRect.init(x: 50, y: 150 + 20, width: 100, height: 100)
let myTransition : SwiftyImageView.ImageTransition = .flipFromBottom(0.2)
myImageView.transition(myTransition, with: UIImage.load("aImage")!)
SwiftyLabel
SwiftyLabel is a better performance than UILabel and can be used like a standard UI component. Also, Easier to use than UILabel. Since UIView is inherited instead of UILabel, there is little wasteful processing. It uses the function of TextKit to draw characters.
let myLable : SwiftyLabel = SwiftyLabel("Label", .white, .blue).addTo(view)
myLable.frame = CGRect.init(x: 50, y: 300 + 20 + 20, width: 100, height: 100)
SwiftyButton
SwiftyButton is a better performance than UIButton and can be used like a standard UI component. Also, Easier to use than UIButton because of block-package and mistake double tap IgnoreEvent. Since UIControl is inherited instead of UIbutton, there is little wasteful processing. It uses the function of TextKit to draw characters and Image feature from GPU.
let myBtn : SwiftyButton = SwiftyButton("Button", myImage, ClosureWrapper({ [weak self] (btn) in
guard let strongSelf = self, let btn = btn else { return }
// do something
})).addTo(view)
myBtn.frame = CGRect(x: 50, y: 450 + 20 + 20 + 20, width: 100, height: 100)
SwiftyTimer
SwiftyTimer is running on RunLoop.
Timer.every(1.0, ClosureWrapper({ (timer) in
print("Timer_every")
})).start()
Timer.after(5.0, ClosureWrapper({ (timer) in
print("Timer_after")
})).start()
SwiftyToast
SwiftyToas is depend on global runloop cente, also show the toast without overlap.
SwiftyToast.load("This is a Toast")
SwiftyAlert
SwiftyAlert contains SuccessAlert, ErrorAlert, WarningAlert, InfoAlert, EditAlert and their special styles.
let alert: SwiftyAlertView = .create()
_ = alert.addTextField()
_ = alert.addButton("First Button", action: {
print("First Button tapped")
})
_ = alert.addButton("Second Button") {
print("Second button tapped")
}
let theAlert: SwiftyAlertViewResponder = alert.showSuccess("Congratulations", subTitle: "You've just displayed this awesome Pop Up View") //showError, showWarning, showInfo, showEdit
theAlert.setDismissBlock {
print("Alert Dismissed")
}
SwiftyThreadPool
ThreadPool is used to manage threads which depends on active CPUs, also autorelease Runloop inside.
let myOperation : BlockOperation = .init {
print("task2----Thread:\(Thread.current)")
for i in 1...3
{
print("Task-------\(i)")
}
}
ThreadPool.defalut.add(myOperation)
SwiftyPromise
Everyone knows PromiseKit and its story. I also use this library in my code. But it is too heavy for my code, so I build a lightweight version of PromiseKit, based partially on Javascript's A+ spec, depends on ThreadPool.
If you dont need send value from different threads in a Premise, it will be simple:
Promise<Void>.firstly(with: nil, on: .background) {
print("Promise<Void>---task1----Thread:\(Thread.current)")
}.then(on: .main) {
print("Promise<Void>---task2----Thread:\(Thread.current)")
throw SimpleError()
}.then {
print("Promise<Void>---task3----Thread:\(Thread.current)")
}.always {
print("Promise<Void>---taskAlways----Thread:\(Thread.current)")
}.catch { (error) in
print("Promise<Void>---error\(String(describing: error))")
}
Also you need to share or send value in different threads in a Promise, you should code as below:
Promise<String>.firstly(on: .background) { (update, _) in
print("task1----Thread:\(Thread.current)")
update("abc")
}.then { (update, str) in
print("thenthenthenthenthenthen----\(String(describing: str))") // abc
var str = str
str?.append("aaaaaaaa") // aaaaaaaaabc
update(str)
}.then(with: nil, on: .main) { (_, str) in
print("mainmainmainmainmainmainmain----\(String(describing: str))") // aaaaaaaaabc
}.catch()
To Do List
- CameraKit, it is a lightweight camera framework.
- OpenGL Video / Image processing.
- Metal Video / Image processing.
- OpenCV Computer vision processing.
- Vision Framework Face Detection.
License
SwiftyUI is released under the MIT license. See LICENSE for details.
*Note that all licence references and agreements mentioned in the SwiftyUI README section above
are relevant to that project's source code only.