Skip to content
This repository has been archived by the owner on Jul 20, 2023. It is now read-only.

Fix markup and typos in readme #126

Closed
wants to merge 3 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 28 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ Description
6. [Customisation](#customisation)
7. [Implementing custom transitions](#custom-transitions)
8. [Public interface](#public-interface)
9. [Delegation] (#delegation)
9. [Delegation](#delegation)
10. [License](#license)
11. [Contact](#contact)

##<a name="features"> Features </a>

<a name="features"> Features </a>
--------------

- [x] Easy to use, fully customisable
- [x] Left and Right side positioning
Expand Down Expand Up @@ -120,10 +120,10 @@ If you prefer not to use either of the aforementioned dependency managers, you c

You can get started using `SideMenuController` in 3 simple steps:

###Step 1
### Step 1
First of all, you should **add a menu button image** and **specify the position of the side panel**. Optionally, you can customise other preferences as well. This can be achieved in two ways:

### 1) If the SideMenuController subclass is the initial view controller in your main storyboard:
#### 1) If the SideMenuController subclass is the initial view controller in your main storyboard:

Subclass `SideMenuController` and override `init(coder:)` where you can change the preferences according to your own style:

Expand All @@ -143,27 +143,29 @@ class CustomSideMenuController: SideMenuController {

Next, go to the Storyboard, and change the class of the SideMenuController to the custom subclass you just created.

### 2) In all other cases:
#### 2) In all other cases:

In `AppDelegate.swift`, override `application:didFinishLaunchingWithOptions:`:

```swift
func func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.

SideMenuController.preferences.drawing.menuButtonImage = UIImage(named: "menu")
SideMenuController.preferences.drawing.sidePanelPosition = .overCenterPanelLeft
SideMenuController.preferences.drawing.sidePanelWidth = 300
SideMenuController.preferences.drawing.centerPanelShadow = true
SideMenuController.preferences.animating.statusBarBehaviour = .showUnderlay

return true
}
```
⚠️_If you **do not** specify a menu button image, `SideMenuController` **will not add one by default** and you will have to manually add one whenever transitioning to a new center view controller._

###Step 2
### Step 2
`SideMenuController` can be used with storyboard segues, or you can programmatically transition to a new center view controller.

####Using storyboard segues####
#### Using storyboard segues

``SideMenuController`` defines two custom segues:
> - `SideContainmentSegue` - which transitions to a new side controller (triggers `embedSideController`)<br />
Expand All @@ -174,7 +176,7 @@ In the storyboard file, add initially two segues from the `SideMenuController` s
Remember to set all the appropriate attributes of each segue in the Attributes Inspector:

| SideContainmentSegue | CenterContainmentSegue |
|----------|:-------------:|------:|
|:----------------------:|:-------------------------------:|
| ![Example](https://raw.githubusercontent.com/teodorpatras/SideMenuController/master/assets/side_settings.png) | ![Example](https://raw.githubusercontent.com/teodorpatras/SideMenuController/master/assets/center_settings.png) |

In order to embed the inital view controlles inside the `SideMenuController` you will have to call `performSegue(withIdentifier:sender:)`. Easiest way is to subclass `SideMenuController` and override `viewDidLoad`:
Expand All @@ -187,7 +189,7 @@ override func viewDidLoad() {
}
```

####Programmatically####
#### Programmatically

You can perform all the above mentioned transitions programmatically, without using segues, by calling one of the two public methods:

Expand All @@ -196,7 +198,7 @@ public func embed(sideViewController: UIViewController)
public func embed(centerViewController: UViewController)
```

**Important Note:** In case you want the center view controller to be of different type than `UINavigationController`, you'll have to add the menu button to one/all of its children navigation controllers programmatically. `SideMenuController` defines an extension to `UINavigationController` in order to make it easy to do that. Just call `navigationController.addSideMenuButton()`. **Before calling that method, make sure the navigation controller is already embedded inside the `SideMenuController`'s child controller hierarchy.**
**Important Note:** In case you want the center view controller to be of a different type than `UINavigationController`, you'll have to add the menu button to one/all of its children navigation controllers programmatically. `SideMenuController` defines an extension to `UINavigationController` in order to make it easy to do that. Just call `navigationController.addSideMenuButton()`. **Before calling that method, make sure the navigation controller is already embedded inside the `SideMenuController`'s child controller hierarchy.**

Example with `UITabBarController`:

Expand Down Expand Up @@ -238,14 +240,14 @@ sideMenuViewController.embed(centerViewController: tabBarController)
show(sideMenuViewController, sender: nil)
```

###Step 3
You're almost set now. Last step is to know how to transition to new center view controllers.
### Step 3
You're almost set now. The last step is to know how to transition to new center view controllers.

**Important Note:** `SideMenuController` defines an extension to `UIViewController` in order to make it more accessible via the computed property `public var sideMenuController: SideMenuController?`. From any `UIViewController` instance, you can access the `SideMenuController` by typing: `self.sideMenuController`. This will return the `SideMenuController` if the caller is one of its child view controllers or otherwise `nil`.

From here onwards, whenever the user selects an option in the side menu controller, you can easily perform the segue like so:

####Using storyboard segues####
#### Using storyboard segues

```swift
override func tableView(_ tableView: UITableView,
Expand All @@ -254,7 +256,7 @@ override func tableView(_ tableView: UITableView,
}
```

####Programmatically####
#### Programmatically

```swift
override func tableView(_ tableView: UITableView,
Expand Down Expand Up @@ -297,32 +299,33 @@ For a more detailed example, check the Example project.

<a name="customisation"> Customisation </a>
--------------

In order to customise the `SideMenuController` appearance and behaviour, you can play with the `SideMenuController .Preferences` structure. It is split into three sub structures:

* ```Drawing``` - encapsulates custom attributes specifying how ```SideMenuController``` will adjust its layout, positioning on screen.
* ```Animating``` - encapsulates custom attributes specifying which animations will be used for different components.
* ```Interaction``` - encapsulates custom attributes specifying how the user is allowed to interract with the side panel
* ```Interaction``` - encapsulates custom attributes specifying how the user is allowed to interact with the side panel


| `Drawing` attribute | Description |
|----------|-------------|------|
|-----------------------|-----------------------|
| `menuButtonImage` | In case this attribute is set, `SideMenuController` will add a button on the left or right side of the navigation bar of the center view controller (**in case it is a subclass of UINavigationController**) in order to trigger the slide animation. If the attribute is missing, or the center view controller is not a subclass of `UINavigationController`, you'll have to add the menu button by yourself to all the `UINavigationControllers` that will be embedded. |
| `sidePanelPosition` | Specifies the positioning of the side panel. This attribute can take one of the four values: `.underCenterPanelLeft`, `.underCenterPanelRight`, `.overCenterPanelLeft`, `.overCenterPanelRight` |
| `sidePanelWidth` | The width of the side panel. |
| `centerPanelOverlayColor` | When the side panel is either `.overCenterPanelLeft` or `.overCenterPanelRight`, an overlay will be shown on top of the center panel when the side is revealed. Pass the preferred color of this overlay. |
| `centerPanelShadow` | When the side panel is either `.underCenterPanelRight ` or `.underCenterPanelLeft` you can opt in or out to draw a side shadow for the center panel. |

| `Animating` attribute | Description |
|----------|-------------|------|
|-------------------------|-----------------------|
| `statusBarBehaviour` | The animating style of the status bar when the side panel is revealed. This can be: <br /> **+** `.slideAnimation`: the status bar will be hidden using the `UIStatusBarAnimation.slide` animation<br /> **+** `.fadeAnimation`: the status bar will be hidden using the `UIStatusBarAnimation.fade` animation<br /> **+** `.horizontalPan`: the status bar will slide along with the center panel horizontally.<br /> **+** `.showUnderlay`: a layer with the same color as the navigation bar will be displayed under the status bar |
| `reavealDuration` | Reveal animation duration. |
| `hideDuration` | Hide animation duration. |
| `transitionAnimator` | `TransitionAnimatable` subtype which defines how the new center view controller will be animated on screen. |

| `Interaction` attribute | Description | Discussion |
|----------|-------------|------|
| `panningEnabled` | Default value is `true` | When the side panel is positioned **under the center panel**, the panning is recognized on the center panel. When the side panel is positoned **over the center panel**, the panning is recognized on the side panel. |
| `swipingEnabled` | Default value is `true` | There is **no swipe gesture recognizer** instantiated when the side panel is positioned *under the center panel*. When the side panel is positioned **over the center panel**, the swipe is going to recognized on the center panel. |
|-------------------------|-----------------------|------------|
| `panningEnabled` | Default value is `true` | When the side panel is positioned **under the center panel**, the panning is recognized on the center panel. When the side panel is positioned **over the center panel**, the panning is recognized on the side panel. |
| `swipingEnabled` | Default value is `true` | There is **no swipe gesture recognizer** instantiated when the side panel is positioned *under the center panel*. When the side panel is positioned **over the center panel**, the swipe is recognized on the center panel. |
| `menuButtonAccessibilityIdentifier` | Accessibility identifier to be set on the menu button. |

<a name="custom-transitions"> Implementing custom transitions </a>
Expand Down Expand Up @@ -355,7 +358,8 @@ For more examples, check `TransitionAnimator.swift`.
<a name="public-interface"> Public interface </a>
--------------

##Public methods##
### Public methods

```swift
/**
Toggles the side pannel visible or not.
Expand Down Expand Up @@ -388,7 +392,7 @@ public func embed(centerViewController controller: UIViewController, cacheIdenti

```

##Public properties##
### Public properties

| Property | Type | Description |
|----------|-------------|------|
Expand Down