diff --git a/Example/HGCircularSlider/Base.lproj/Main.storyboard b/Example/HGCircularSlider/Base.lproj/Main.storyboard index 481e1b0..55b8523 100755 --- a/Example/HGCircularSlider/Base.lproj/Main.storyboard +++ b/Example/HGCircularSlider/Base.lproj/Main.storyboard @@ -1,12 +1,11 @@ - + - - - + + @@ -154,7 +153,7 @@ - + @@ -177,7 +176,7 @@ - + @@ -290,7 +289,7 @@ - + @@ -382,7 +381,7 @@ - + @@ -584,7 +583,7 @@ - + @@ -602,7 +601,7 @@ + - - - - - diff --git a/Example/HGCircularSlider/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/HGCircularSlider/Images.xcassets/AppIcon.appiconset/Contents.json index b8236c6..19882d5 100755 --- a/Example/HGCircularSlider/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/HGCircularSlider/Images.xcassets/AppIcon.appiconset/Contents.json @@ -39,6 +39,11 @@ "idiom" : "iphone", "size" : "60x60", "scale" : "3x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/Example/HGCircularSlider/Images.xcassets/arrow_thumb.imageset/Contents.json b/Example/HGCircularSlider/Images.xcassets/arrow_thumb.imageset/Contents.json new file mode 100644 index 0000000..37dddad --- /dev/null +++ b/Example/HGCircularSlider/Images.xcassets/arrow_thumb.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "arrow_thumb.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Example/HGCircularSlider/Images.xcassets/arrow_thumb.imageset/arrow_thumb.png b/Example/HGCircularSlider/Images.xcassets/arrow_thumb.imageset/arrow_thumb.png new file mode 100644 index 0000000..54f3227 Binary files /dev/null and b/Example/HGCircularSlider/Images.xcassets/arrow_thumb.imageset/arrow_thumb.png differ diff --git a/HGCircularSlider/Classes/CircularSlider+Draw.swift b/HGCircularSlider/Classes/CircularSlider+Draw.swift index 29fe75d..d1772af 100644 --- a/HGCircularSlider/Classes/CircularSlider+Draw.swift +++ b/HGCircularSlider/Classes/CircularSlider+Draw.swift @@ -125,14 +125,23 @@ extension CircularSlider { - returns: return the origin point of the thumb */ @discardableResult - internal func drawThumb(withImage image: UIImage, angle: CGFloat, inContext context: CGContext) -> CGPoint { + internal func drawThumb(withImage image: UIImage, angle: CGFloat, inContext context: CGContext, rotate: Bool) -> CGPoint { UIGraphicsPushContext(context) context.beginPath() let circle = Circle(origin: bounds.center, radius: self.radius) let thumbOrigin = CircularSliderHelper.endPoint(fromCircle: circle, angle: angle) let imageSize = image.size let imageFrame = CGRect(x: thumbOrigin.x - (imageSize.width / 2), y: thumbOrigin.y - (imageSize.height / 2), width: imageSize.width, height: imageSize.height) + if rotate { + context.saveGState() + context.translateBy(x: imageFrame.center.x, y: imageFrame.center.y) + context.rotate(by: angle) + context.translateBy(x: -imageFrame.center.x, y: -imageFrame.center.y) + } image.draw(in: imageFrame) + if rotate { + context.restoreGState() + } UIGraphicsPopContext() return thumbOrigin diff --git a/HGCircularSlider/Classes/CircularSlider.swift b/HGCircularSlider/Classes/CircularSlider.swift index ca90b5a..5476398 100644 --- a/HGCircularSlider/Classes/CircularSlider.swift +++ b/HGCircularSlider/Classes/CircularSlider.swift @@ -126,6 +126,7 @@ open class CircularSlider: UIControl { * * The default value of this property is nil */ + @IBInspectable open var endThumbImage: UIImage? // MARK: Accessing the Slider’s Value Limits @@ -172,6 +173,16 @@ open class CircularSlider: UIControl { } } + /** + * When set to true, thumb image will rotate when the value changes. + */ + @IBInspectable + open var rotatesThumb: Bool = false { + didSet { + setNeedsDisplay() + } + } + /** * The value of the endThumb (changed when the user change the position of the end thumb) * @@ -265,7 +276,7 @@ open class CircularSlider: UIControl { drawThumb(withAngle: endAngle, inContext: context) return } - drawThumb(withImage: image, angle: endAngle, inContext: context) + drawThumb(withImage: image, angle: endAngle, inContext: context, rotate: rotatesThumb) } // MARK: User interaction methods diff --git a/HGCircularSlider/Classes/MidPointCircularSlider.swift b/HGCircularSlider/Classes/MidPointCircularSlider.swift index f30c2e6..96f80c6 100755 --- a/HGCircularSlider/Classes/MidPointCircularSlider.swift +++ b/HGCircularSlider/Classes/MidPointCircularSlider.swift @@ -121,7 +121,7 @@ open class MidPointCircularSlider: RangeCircularSlider { drawThumb(withAngle: midAngle, inContext: context) return } - drawThumb(withImage: image, angle: midAngle, inContext: context) + drawThumb(withImage: image, angle: midAngle, inContext: context, rotate: rotatesThumb) } // MARK: User interaction methods diff --git a/HGCircularSlider/Classes/RangeCircularSlider.swift b/HGCircularSlider/Classes/RangeCircularSlider.swift index e2a31f6..94621c8 100644 --- a/HGCircularSlider/Classes/RangeCircularSlider.swift +++ b/HGCircularSlider/Classes/RangeCircularSlider.swift @@ -237,7 +237,7 @@ open class RangeCircularSlider: CircularSlider { (isHighlighted == true && selectedThumb == .endThumb) ? endThumbStrokeHighlightedColor.setStroke() : endThumbStrokeColor.setStroke() endThumbCenter = drawThumb(withAngle: endAngle, inContext: context) if let image = endThumbImage { - endThumbCenter = drawThumb(withImage: image, angle: endAngle, inContext: context) + endThumbCenter = drawThumb(withImage: image, angle: endAngle, inContext: context, rotate: rotatesThumb) } // start thumb @@ -246,7 +246,7 @@ open class RangeCircularSlider: CircularSlider { startThumbCenter = drawThumb(withAngle: startAngle, inContext: context) if let image = startThumbImage { - startThumbCenter = drawThumb(withImage: image, angle: startAngle, inContext: context) + startThumbCenter = drawThumb(withImage: image, angle: startAngle, inContext: context, rotate: rotatesThumb) } }