Minor fix
This commit is contained in:
parent
ba676cb6e1
commit
3987e05ebc
|
|
@ -0,0 +1,183 @@
|
|||
##Segmentio
|
||||
[](https://github.com/Yalantis/Segmentio/blob/master/LICENSE)
|
||||
[]
|
||||
|
||||
Animated top/bottom segmented control written in Swift.
|
||||
|
||||
[](https://Yalantis.com/?utm_source=github)
|
||||
|
||||
##Requirements
|
||||
|
||||
iOS 8.x, Swift 2.2
|
||||
|
||||
##Installation
|
||||
|
||||
####[CocoaPods](http://cocoapods.org)
|
||||
```ruby
|
||||
use_frameworks!
|
||||
|
||||
# Swift 2.2
|
||||
pod 'Segmentio', '~> 0.1.0'
|
||||
```
|
||||
|
||||
*(CocoaPods v1.0.1 or later required. See [this blog post](http://blog.cocoapods.org/Pod-Authors-Guide-to-CocoaPods-Frameworks/) for details.)*
|
||||
|
||||
##Usage
|
||||
####Import `Segmentio` module
|
||||
```swift
|
||||
import Segmentio
|
||||
```
|
||||
|
||||
####Init
|
||||
You can initialize a `Segmentio` instance from code:
|
||||
```swift
|
||||
var segmentioView: Segmentio!
|
||||
|
||||
let segmentioViewRect = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: 125)
|
||||
segmentioView = Segmentio(frame: segmentioViewRect)
|
||||
view.addSubview(segmentioView)
|
||||
```
|
||||
or
|
||||
|
||||
add a `UIView` instance in your .storyboard or .xib, set `Segmentio` class and connect `IBOutlet`:
|
||||
```swift
|
||||
@IBOutlet weak var segmentioView: Segmentio!
|
||||
```
|
||||
|
||||
####Setup `Segmentio`
|
||||
```swift
|
||||
segmentioView.setupContent(
|
||||
content: [SegmentioItem],
|
||||
style: SegmentioStyle,
|
||||
options: SegmentioOptions?
|
||||
)
|
||||
```
|
||||
|
||||
To start with default options you can just pass `nil` to the `options` parameter.
|
||||
|
||||
```swift
|
||||
segmentioView.setupContent(
|
||||
content: [SegmentioItem],
|
||||
style: SegmentioStyle,
|
||||
options: nil
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
####Configuring items
|
||||
In order to set items you need to create an array of `SegmentioItem` instances:
|
||||
```swift
|
||||
var content = [SegmentioItem]()
|
||||
|
||||
let tornadoItem = SegmentioItem(
|
||||
title: "Tornado",
|
||||
image: UIImage(named: "tornado")
|
||||
)
|
||||
content.append(tornadoItem)
|
||||
```
|
||||
|
||||
####Handling selection
|
||||
You can specify selected item manually:
|
||||
```swift
|
||||
segmentioView.selectedSegmentIndex = 0
|
||||
```
|
||||
|
||||
####Handling callback
|
||||
```swift
|
||||
segmentioView.valueDidChange = { segmentio, segmentIndex in
|
||||
print("Selected item: ", segmentIndex)
|
||||
}
|
||||
```
|
||||
|
||||
####Customization
|
||||
`Segmentio` can be customized by passing an instance of `SegmentioOptions` struct:
|
||||
```swift
|
||||
SegmentioOptions(
|
||||
backgroundColor: UIColor.whiteColor(),
|
||||
maxVisibleItems: 3,
|
||||
scrollEnabled: true,
|
||||
indicatorOptions: SegmentioIndicatorOptions,
|
||||
horizontalSeparatorOptions: SegmentioHorizontalSeparatorOptions,
|
||||
verticalSeparatorOptions: SegmentioVerticalSeparatorOptions,
|
||||
imageContentMode: UIViewContentMode.Center,
|
||||
labelTextAlignment: NSTextAlignment.Center,
|
||||
segmentStates: SegmentioStates // tuple of SegmentioState (defaultState, selectState, highlightedState)
|
||||
)
|
||||
```
|
||||
|
||||
Selection indicator can be customized by passing an instance of `SegmentioIndicatorOptions`:
|
||||
```swift
|
||||
SegmentioIndicatorOptions(
|
||||
type: .Bottom,
|
||||
ratio: 1,
|
||||
height: 5,
|
||||
color: UIColor.orangeColor()
|
||||
)
|
||||
```
|
||||
|
||||
Horizontal borders can be customized by passing an instance of `SegmentioHorizontalSeparatorOptions`:
|
||||
```swift
|
||||
SegmentioHorizontalSeparatorOptions(
|
||||
type: SegmentioHorizontalSeparatorType.TopAndBottom, // Top, Bottom, TopAndBottom
|
||||
height: 1,
|
||||
color: UIColor.grayColor()
|
||||
)
|
||||
```
|
||||
|
||||
Separators between segments can be customized by passing an instance of `SegmentioVerticalSeparatorOptions`:
|
||||
```swift
|
||||
SegmentioVerticalSeparatorOptions(
|
||||
ratio: 0.6 // from 0.1 to 1
|
||||
color: UIColor.grayColor()
|
||||
)
|
||||
```
|
||||
|
||||
In order to set `SegmentioStates` you need to create a tuple of `SegmentioState` instances:
|
||||
```swift
|
||||
SegmentioStates(
|
||||
defaultState: segmentioState(
|
||||
backgroundColor: UIColor.clearColor(),
|
||||
titleFont: UIFont.systemFontOfSize(UIFont.smallSystemFontSize()),
|
||||
titleTextColor: UIColor.blackColor()
|
||||
),
|
||||
selectState: segmentioState(
|
||||
backgroundColor: UIColor.orangeColor(),
|
||||
titleFont: UIFont.systemFontOfSize(UIFont.smallSystemFontSize()),
|
||||
titleTextColor: UIColor.whiteColor()
|
||||
),
|
||||
highlinedState: segmentioState(
|
||||
backgroundColor: UIColor.lightGrayColor().colorWithAlphaComponent(0.6),
|
||||
titleFont: UIFont.boldSystemFontOfSize(UIFont.smallSystemFontSize()),
|
||||
titleTextColor: UIColor.blackColor()
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
####Let us know!
|
||||
We’d be really happy if you sent us links to your projects where you use our component. Just send an email to github@yalantis.com And do let us know if you have any questions or suggestion regarding the animation.
|
||||
|
||||
P.S. We’re going to publish more awesomeness wrapped in code and a tutorial on how to make UI for iOS (Android) better than better. Stay tuned!
|
||||
|
||||
##License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright © 2016 Yalantis
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
320E4C191D2A820800A93C10 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 320E4C181D2A820800A93C10 /* README.md */; };
|
||||
320E4C1B1D2A880500A93C10 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 320E4C1A1D2A880500A93C10 /* README.md */; };
|
||||
324015CC1D22C0ED0096E353 /* Hints.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324015CB1D22C0ED0096E353 /* Hints.swift */; };
|
||||
324015CE1D22D40A0096E353 /* UIFont+ExampleFonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324015CD1D22D40A0096E353 /* UIFont+ExampleFonts.swift */; };
|
||||
324015D01D22FCD50096E353 /* String+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324015CF1D22FCD50096E353 /* String+Convenience.swift */; };
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
1667ACAF5594F75E244C8E1B /* Pods-Segmentio_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Segmentio_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.release.xcconfig"; sourceTree = "<group>"; };
|
||||
183F56A87F22C4DF4AB3CDCB /* Pods_Segmentio_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Segmentio_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2F629976269F20B0601D695D /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
|
||||
320E4C181D2A820800A93C10 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||
320E4C1A1D2A880500A93C10 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||
324015CB1D22C0ED0096E353 /* Hints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Hints.swift; sourceTree = "<group>"; };
|
||||
324015CD1D22D40A0096E353 /* UIFont+ExampleFonts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIFont+ExampleFonts.swift"; sourceTree = "<group>"; };
|
||||
324015CF1D22FCD50096E353 /* String+Convenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Convenience.swift"; sourceTree = "<group>"; };
|
||||
|
|
@ -194,9 +194,9 @@
|
|||
607FACF51AFB993E008FA782 /* Podspec Metadata */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
320E4C1A1D2A880500A93C10 /* README.md */,
|
||||
7EBD99A4E34C02531B010FB7 /* Segmentio.podspec */,
|
||||
2F629976269F20B0601D695D /* LICENSE */,
|
||||
320E4C181D2A820800A93C10 /* README.md */,
|
||||
);
|
||||
name = "Podspec Metadata";
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -344,7 +344,7 @@
|
|||
327AF5D01D1ABEC100534355 /* UIColor+RGB.swift in Sources */,
|
||||
324015CE1D22D40A0096E353 /* UIFont+ExampleFonts.swift in Sources */,
|
||||
327AF5E91D1ABEC100534355 /* ExampleViewController.swift in Sources */,
|
||||
320E4C191D2A820800A93C10 /* README.md in Sources */,
|
||||
320E4C1B1D2A880500A93C10 /* README.md in Sources */,
|
||||
324015D01D22FCD50096E353 /* String+Convenience.swift in Sources */,
|
||||
327AF6041D1AC0FE00534355 /* ColorPalette.swift in Sources */,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@ public class Segmentio: UIView {
|
|||
|
||||
// MARK: Move shape layer
|
||||
|
||||
private func moveShapeLayer(shapeLayer: CAShapeLayer, startPoint startPoint: CGPoint, endPoint: CGPoint, animated: Bool = false) {
|
||||
private func moveShapeLayer(shapeLayer: CAShapeLayer, startPoint: CGPoint, endPoint: CGPoint, animated: Bool = false) {
|
||||
var endPointWithVerticalSeparator = endPoint
|
||||
let isLastItem = selectedSegmentioIndex + 1 == segmentioItems.count
|
||||
endPointWithVerticalSeparator.x = endPoint.x - (isLastItem ? 0 : 1)
|
||||
|
|
|
|||
Loading…
Reference in New Issue