Fixes #26
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 879 B After Width: | Height: | Size: 810 B |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
|
@ -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">
|
||||
|
|
|
|||