This commit is contained in:
Xavier Schott 2018-06-06 14:18:18 -07:00
parent 8d016e6e9e
commit 7c75b9bac7
10 changed files with 80 additions and 36 deletions

View File

@ -41,7 +41,13 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
}
}
@IBInspectable public var tickTintColor:UIColor? = nil {
@IBInspectable public var minimumTickTintColor:UIColor? = nil {
didSet {
layoutTrack()
}
}
@IBInspectable public var maximumTickTintColor:UIColor? = nil {
didSet {
layoutTrack()
}
@ -78,7 +84,7 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
}
}
@IBInspectable public var maximumTrackTintColor:UIColor = UIColor(white: 0.71, alpha: 1) {
@IBInspectable public var maximumTrackTintColor = UIColor(white: 0.71, alpha: 1) {
didSet {
layoutTrack()
}
@ -223,12 +229,19 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
var ticksAbscissae:[CGPoint] = []
var thumbAbscissa:CGFloat = 0
var thumbLayer = CALayer()
var trackLayer = CALayer()
var leftTrackLayer = CALayer()
var rightTrackLayer = CALayer()
var trackLayer = CALayer()
var leadingTrackLayer: CALayer!
var trailingTrackLayer: CALayer!
var ticksLayer = CALayer()
var leftTicksLayer = CALayer()
var rightTicksLayer = CALayer()
var leadingTicksLayer: CALayer!
var trailingTicksLayer: CALayer!
var trackRectangle = CGRect.zero
var touchedInside = false
var localeCharacterDirection = CFLocaleLanguageDirection.leftToRight
@ -275,21 +288,27 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
trailingTrackLayer = (.rightToLeft == localeCharacterDirection)
? leftTrackLayer
: rightTrackLayer
leadingTicksLayer = (.rightToLeft == localeCharacterDirection)
? rightTicksLayer
: leftTicksLayer
trailingTicksLayer = (.rightToLeft == localeCharacterDirection)
? leftTicksLayer
: rightTicksLayer
// Track is a clear clipping layer, and left + right sublayers, which brings in free animation
// Track and ticks are in a clear clipping layer, and left + right sublayers,
// which brings in free animation
trackLayer.masksToBounds = true
trackLayer.backgroundColor = UIColor.clear.cgColor
layer.addSublayer(trackLayer)
trackLayer.addSublayer(leftTrackLayer)
trackLayer.addSublayer(rightTrackLayer)
if let backgroundColor = tintColor {
leadingTrackLayer.backgroundColor = backgroundColor.cgColor
}
rightTrackLayer.backgroundColor = maximumTrackTintColor.cgColor
// Ticks in between track and thumb
ticksLayer.masksToBounds = true
ticksLayer.backgroundColor = UIColor.clear.cgColor
layer.addSublayer(ticksLayer)
ticksLayer.addSublayer(rightTicksLayer) // reverse order, left covers right
ticksLayer.addSublayer(leftTicksLayer)
// The thumb is its own CALayer, which brings in free animation
layer.addSublayer(thumbLayer)
@ -300,11 +319,6 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
func drawTicks() {
ticksLayer.frame = bounds
if let tickColor = tickTintColor ?? tintColor {
ticksLayer.backgroundColor = tickColor.cgColor
}
let path = UIBezierPath()
switch tickComponentStyle {
@ -363,10 +377,35 @@ public class TGPDiscreteSlider:TGPSlider_INTERFACE_BUILDER {
break
}
let maskLayer = CAShapeLayer()
maskLayer.frame = trackLayer.bounds
maskLayer.path = path.cgPath
ticksLayer.mask = maskLayer
leftTicksLayer.frame = {
var frame = ticksLayer.bounds
let tickWidth = (.rightToLeft == localeCharacterDirection)
? -tickSize.width/2
: tickSize.width/2
frame.size.width = tickWidth + thumbAbscissa
return frame
}()
leftTicksLayer.mask = {
let maskLayer = CAShapeLayer()
maskLayer.frame = ticksLayer.bounds
maskLayer.path = path.cgPath
return maskLayer
}()
rightTicksLayer.frame = ticksLayer.bounds
rightTicksLayer.mask = {
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
return maskLayer
}()
if let backgroundColor = minimumTickTintColor ?? (minimumTrackTintColor ?? tintColor) {
leadingTicksLayer.backgroundColor = backgroundColor.cgColor
}
trailingTicksLayer.backgroundColor = maximumTickTintColor?.cgColor ?? maximumTrackTintColor.cgColor
}
func drawTrack() {

View File

@ -3,8 +3,23 @@ platform :ios, '8.0'
use_frameworks!
target 'TGPControlsDemo-Pods' do
pod 'TGPControls', :path => '../../TGPControls'
#pod 'TGPControls'
#pod 'TGPControls', :path => '../../TGPControls'
pod 'TGPControls'
end
# Failed to render and update auto layout status for UIViewController : dlopen(Cosmos.framework, 1): no suitable image found
# https://github.com/CocoaPods/CocoaPods/issues/7606#issuecomment-381279098
# https://stackoverflow.com/a/49936237/218152
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings.delete('CODE_SIGNING_ALLOWED')
config.build_settings.delete('CODE_SIGNING_REQUIRED')
end
end
installer.pods_project.build_configurations.each do |config|
config.build_settings.delete('CODE_SIGNING_ALLOWED')
config.build_settings.delete('CODE_SIGNING_REQUIRED')
end
end

View File

@ -164,7 +164,6 @@
DC56BDC01E46DEB900AAD0D9 /* Frameworks */,
DC56BDC11E46DEB900AAD0D9 /* Resources */,
A772C50843047EE677ADAF15 /* [CP] Embed Pods Frameworks */,
3FF2E09CAFA7D92A488FACF7 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -258,21 +257,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
3FF2E09CAFA7D92A488FACF7 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TGPControlsDemo-Pods/Pods-TGPControlsDemo-Pods-resources.sh\"\n";
showEnvVarsInLog = 0;
};
A772C50843047EE677ADAF15 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 879 B

After

Width:  |  Height:  |  Size: 810 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -379,6 +379,12 @@
<userDefinedRuntimeAttribute type="size" keyPath="thumbShadowOffset">
<size key="value" width="0.0" height="0.0"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="minimumTickTintColor">
<color key="value" red="0.85098039219999999" green="0.0" blue="0.1058823529" alpha="1" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="color" keyPath="maximumTickTintColor">
<color key="value" red="0.85098039219999999" green="0.49424107142857143" blue="0.1058823529" alpha="1" colorSpace="calibratedRGB"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="UIControlActions" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gID-5d-KDe">