Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kieranb662/PartitionKit

A SwiftUI Library for creating resizable partitions for View Content.
https://github.com/kieranb662/PartitionKit

swift-library swift-package-manager swiftui

Last synced: about 1 month ago
JSON representation

A SwiftUI Library for creating resizable partitions for View Content.

Awesome Lists containing this project

README

        

# Partition Kit

![partition kit logo](https://github.com/kieranb662/PartitionKit/blob/master/partition-kit-logo.png)

Recently Featured In [Top 10 Trending Android and iOS Libraries in October](https://medium.com/better-programming/top-10-trending-android-and-ios-libraries-in-october-e7dd18f8b75b) and in [5 iOS libraries to enhance your app](https://medium.com/better-programming/5-ios-libraries-to-enhance-your-app-17ae7ed350db)!

![grid](/nestedGrid.gif)

What is PartitionKit?
- It is the solution to the need for composable and dynamically sized user interface content in SwiftUI.
- also the first piece of software I have ever made into a library so please be gentle(both with use cases and with my heart).

What PartitionKit is **not** ?
- PartitionKit is not a means to work with an form of stored data, this is not for partitioning hard drives or any other type of formattable data drive.

## Requirements

PartitionKit as a default requires the SwiftUI Framework to be operational, as such only these platforms are supported:

* macOS 10.15 or Greater
* iOS 13 or Greater
* tvOS 13 or Greater
* watchOS 6 or Greater

## How To Add To Your Project

1. Snag that URL from the github repo
2. In Xcode -> File -> Swift Packages -> Add Package Dependencies
3. Paste the URL Into the box
4. Specify the minimum version number (This is new so 1.0.0 and greater will work).

## Less Than 2 Minute Tutorial Video

[![Tutorial Video: How To Use PartitionKit](https://img.youtube.com/vi/RSnEevQcqjk/0.jpg)](https://www.youtube.com/watch?v=RSnEevQcqjk)

## How To Use

### Vertical Partition

1. Decide on what view you would like to have on `Top`, which you would like to have on the `Bottom` and optionally a `Handle` to be used to drag the partitions to different sizes.
2. Do This
``` Swift
VPart(top: {
MyTopView()
}, bottom: {
MyBottomView()
}) {
MyHandle()
}
```

### Horizontal Partition

1. Decide on what view you would like to have on `Left`, which you would like to have on the `Right` and optionally a `Handle` to be used to drag the partitions to different sizes.
2. Do This
``` Swift
HPart(left: {
MyLeftView()
}, right: {
MyRightView()
}) {
MyHandle()
}
```

### GridPartition

1. Decide on what Views will go in each corner `TopLeft`, `TopRight`, `BottomLeft`, `BottomRight` and optionally a `Handle` for the user to drag and resize the views with.
2. Do this
``` Swift
GridPart(topLeft: {
MyTopLeftView()
}, topRight: {
MyTopRightView()
}, bottomLeft: {
MyBottomLeftView()
}, bottomRight: {
MyBottomRightView()
}) {
MyHandle()
}
```

## Examples

Copy and Paste this I have added Named pictures for how the views should look, Im using dark mode so light mode colors may look different.

| HPart | VPart | GridPart | NestGrids | Mixed |
|-------------------------|-------------------------|-------------------------------|----------------------------------------|-----------------------------|
| ![HPart](/hExample.png) | ![VPart](/vExample.png) | ![GridPart](/gridExample.png) | ![Nested Grid](/nestedGridExample.png) | ![Mixed](/nestedExample.png) |

``` Swift
import SwiftUI
import PartitionKit

struct ContentView: View {
var vExample: some View {
VPart(top: {
RoundedRectangle(cornerRadius: 25).foregroundColor(.purple)
}) {
Circle().foregroundColor(.yellow)
}
}

var hExample: some View {
HPart(left: {
RoundedRectangle(cornerRadius: 10).foregroundColor(.blue)
}) {
Circle().foregroundColor(.orange)
}
}

var nestedExample: some View {
VPart(top: {
hExample
}) {
vExample
}
}

var gridExample: some View {
GridPart(topLeft: {
RoundedRectangle(cornerRadius: 25).foregroundColor(.purple)
}, topRight: {
Circle().foregroundColor(.yellow)
}, bottomLeft: {
Circle().foregroundColor(.green)
}) {
RoundedRectangle(cornerRadius: 25).foregroundColor(.blue)
}
}

var nestedGridsExample: some View {
GridPart(topLeft: {
gridExample
}, topRight: {
gridExample
}, bottomLeft: {
gridExample
}) {
gridExample
}
}

var body: some View {
nestedExample

}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
```

## Todo
* Add in constraints so that partitions will not cause negative frame values that invert the views when the handle is dragged beyond the frame of the container
* Add more customizability to initial layouts
* Add a `List` Style grid collection layout that can be initiated with a list of Identifiable data elements.
* General cleanup, some stuff was not meant to be left in, i will find it at some point.