Skip to content

Commit

Permalink
feat: improve the Example projects which includes three examples now
Browse files Browse the repository at this point in the history
remove kvo feature from Slider
  • Loading branch information
guoyingtao committed Jun 14, 2023
1 parent 68b65c0 commit df07ca6
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 112 deletions.
27 changes: 10 additions & 17 deletions Example/InchwormExample/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15400" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15404"/>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
Expand All @@ -14,27 +16,18 @@
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rYX-96-C46">
<rect key="frame" x="177" y="433.5" width="60" height="39"/>
<fontDescription key="fontDescription" type="system" pointSize="22"/>
<state key="normal" title="toggle"/>
<connections>
<action selector="toggle" destination="BYZ-38-t0r" eventType="touchUpInside" id="cfC-pU-lnn"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="rYX-96-C46" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="2Qz-y3-JZW"/>
<constraint firstItem="rYX-96-C46" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="NQS-nr-B5E"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="137.68115942028987" y="113.83928571428571"/>
</scene>
</scenes>
<resources>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>
122 changes: 53 additions & 69 deletions Example/InchwormExample/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,62 @@ import UIKit
import Inchworm

class ViewController: UIViewController {

var horizontalWidthConstraint: NSLayoutConstraint!
var horizontalHeightConstraint: NSLayoutConstraint!
var horizontalCenterXConstraint: NSLayoutConstraint!
var horizontalBottomConstraint: NSLayoutConstraint!

var verticalWidthConstraint: NSLayoutConstraint!
var verticalHeightConstraint: NSLayoutConstraint!
var verticalCenterYConstraint: NSLayoutConstraint!
var verticalTrailingConstraint: NSLayoutConstraint!

var horizontal = true
var config = Inchworm.Config()

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = .black

createMiddleTypeSlider()
createLeftTypeSlider()

createVerticalSlider()
}

func createMiddleTypeSlider() {
var config = Config()
config.sliderZeroPositionType = .middle
let slider = createSlider(with: config)
slider.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
slider.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -100),
slider.heightAnchor.constraint(equalToConstant: 120),
slider.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40),
slider.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -150)
])
}

func createLeftTypeSlider() {
var config = Config()
config.sliderZeroPositionType = .left


let slider = createSlider(with: config)
slider.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
slider.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -100),
slider.heightAnchor.constraint(equalToConstant: 120),
slider.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40),
slider.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
])
}

func createVerticalSlider() {
var config = Config()
config.orientation = .vertical
let slider = createSlider(with: config)

slider.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
slider.widthAnchor.constraint(equalToConstant: 120),
slider.heightAnchor.constraint(equalToConstant: 400),
slider.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
slider.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
}

func createSlider(with config: Config) -> UIView {
let model1 = ProcessIndicatorModel(limitNumber: 30,
normalIconImage: UIImage(named: "ic_flash_on")!.tinted(with: UIColor.white)!.cgImage!,
dimmedIconImage: UIImage(named: "ic_flash_on")!.tinted(with: UIColor.gray)!.cgImage!)
Expand All @@ -46,63 +81,12 @@ class ViewController: UIViewController {

let modelList = [model1, model2, model3]

let slider = createSlider(config: config, frame: .zero, processIndicatorModels: modelList, activeIndex: 1)
slider.delegate = self
let slider = Inchworm.createSlider(config: config, frame: .zero, processIndicatorModels: modelList, activeIndex: 1)
slider.delegate = self

view.addSubview(slider)

slider.translatesAutoresizingMaskIntoConstraints = false

horizontalWidthConstraint = slider.widthAnchor.constraint(equalToConstant: 300)
horizontalHeightConstraint = slider.heightAnchor.constraint(equalToConstant: 120)
horizontalCenterXConstraint = slider.centerXAnchor.constraint(equalTo: view.centerXAnchor)
horizontalBottomConstraint = slider.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)

verticalWidthConstraint = slider.widthAnchor.constraint(equalToConstant: 120)
verticalHeightConstraint = slider.heightAnchor.constraint(equalToConstant: 400)
verticalCenterYConstraint = slider.centerYAnchor.constraint(equalTo: view.centerYAnchor)
verticalTrailingConstraint = slider.trailingAnchor.constraint(equalTo: view.trailingAnchor)

toggle()
}

@IBAction func toggle() {
if horizontal {
config.orientation = .horizontal

NSLayoutConstraint.deactivate([
verticalWidthConstraint,
verticalHeightConstraint,
verticalCenterYConstraint,
verticalTrailingConstraint
])

NSLayoutConstraint.activate([
horizontalWidthConstraint,
horizontalHeightConstraint,
horizontalCenterXConstraint,
horizontalBottomConstraint
])

} else {
config.orientation = .vertical

NSLayoutConstraint.deactivate([
horizontalWidthConstraint,
horizontalHeightConstraint,
horizontalCenterXConstraint,
horizontalBottomConstraint
])

NSLayoutConstraint.activate([
verticalWidthConstraint,
verticalHeightConstraint,
verticalCenterYConstraint,
verticalTrailingConstraint
])
}

horizontal = !horizontal
return slider
}
}

Expand Down
10 changes: 4 additions & 6 deletions Inchworm/Source/Inchworm.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,20 @@ public func createSlider(config: Config = Config(),
return board
}

@objc public class Config: NSObject {
// You can change the orientation about passing config to a Slider
@objc public dynamic var orientation: SliderOrientation = .horizontal

public struct Config {
public var orientation: SliderOrientation = .horizontal
public var indicatorSpan: CGFloat = 50
public var slideRulerSpan: CGFloat = 50
public var spaceBetweenIndicatorAndSlideRule: CGFloat = 10
public var forceAlignCenterFeedback = true
public var sliderZeroPositionType: SliderZeroPositionType = .middle

public override init() {
public init() {

}
}

@objc public enum SliderOrientation: Int {
public enum SliderOrientation: Int {
case horizontal
case vertical
}
Expand Down
1 change: 0 additions & 1 deletion Inchworm/Source/ProcessIndicatorContainer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import UIKit

class ProcessIndicatorContainer: UIView {

var progressIndicatorViewList: [ProcessIndicatorView] = []
var backgroundSlideView = UIScrollView()
var activeIndicatorIndex = 0
Expand Down
22 changes: 3 additions & 19 deletions Inchworm/Source/Slider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,19 @@ public class Slider: UIView {
*/
var baseContainer = UIView()

var config: Config! {
didSet {
handleConfigChange()
}
}
var config: Config!

// You can active different constraints for different orientation
var containerHorizontalWidthConstraint: NSLayoutConstraint!
var containerHoritontalHeightConstraint: NSLayoutConstraint!
var containerVerticalWidthConstraint: NSLayoutConstraint!
var containerVerticalHeightConstraint: NSLayoutConstraint!

var observer: NSObjectProtocol?

init(config: Config = Config(), frame: CGRect) {
super.init(frame: frame)

self.config = config

observer = self.config.observe(\.orientation, options: .new) { [weak self] _, _ in
self?.handleConfigChange()
}


createIndicatorContainer()
createSlideRuler()

Expand Down Expand Up @@ -91,13 +81,7 @@ public class Slider: UIView {
slideRuler.delegate = self
slideRuler.forceAlignCenterFeedback = config.forceAlignCenterFeedback
}

func handleConfigChange() {
adjustContainerByOrientation()
indicatorContainer.orientation = config.orientation
indicatorContainer.handleBoundsChange()
}


func initialAutolayoutConstraint() {
baseContainer.translatesAutoresizingMaskIntoConstraints = false
indicatorContainer.translatesAutoresizingMaskIntoConstraints = false
Expand Down

0 comments on commit df07ca6

Please sign in to comment.