--- a/project_files/HedgewarsMobile/ValueTrackingSliderView.m Thu Feb 09 18:59:46 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-/*
- * Hedgewars-iOS, a Hedgewars port for iOS devices
- * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * File created on 06/02/2012.
- */
-
-// class heavily based on: http://blog.neuwert-media.com/2011/04/customized-uislider-with-visual-value-tracking/
-
-
-#import "ValueTrackingSliderView.h"
-
-#pragma mark -
-#pragma mark Private UIView subclass rendering the popup showing slider value
-@interface SliderValuePopupView : UIView
-@property (nonatomic) float value;
-@property (nonatomic, retain) UIFont *font;
-@property (nonatomic, retain) NSString *text;
-@end
-
-@implementation SliderValuePopupView
-
-@synthesize value = _value;
-@synthesize font = _font;
-@synthesize text = _text;
-
--(id) initWithFrame:(CGRect) frame {
- self = [super initWithFrame:frame];
- if (self) {
- self.font = [UIFont boldSystemFontOfSize:18];
- }
- return self;
-}
-
--(void) dealloc {
- self.text = nil;
- self.font = nil;
- [super dealloc];
-}
-
--(void) drawRect:(CGRect) rect {
- // Create the path for the rounded rectangle
- CGRect roundedRect = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, self.bounds.size.width, floorf(self.bounds.size.height * 0.8));
- UIBezierPath *roundedRectPath = [UIBezierPath bezierPathWithRoundedRect:roundedRect cornerRadius:6.0];
- roundedRectPath.lineWidth = 2.0f;
-
- // Create the arrow path
- UIBezierPath *arrowPath = [UIBezierPath bezierPath];
- CGFloat midX = CGRectGetMidX(self.bounds);
- CGPoint p0 = CGPointMake(midX, CGRectGetMaxY(self.bounds));
- [arrowPath moveToPoint:p0];
- [arrowPath addLineToPoint:CGPointMake((midX - 10.0), CGRectGetMaxY(roundedRect))];
- [arrowPath addLineToPoint:CGPointMake((midX + 10.0), CGRectGetMaxY(roundedRect))];
- [arrowPath closePath];
-
- // Attach the arrow path to the rounded rect
- [roundedRectPath appendPath:arrowPath];
-
- // Color various sections
- [[UIColor blackColor] setFill];
- [roundedRectPath fill];
- [[UIColor whiteColor] setStroke];
- [roundedRectPath stroke];
- [[UIColor whiteColor] setFill];
- [arrowPath fill];
-
- // Draw the text
- if (self.text) {
- [[UIColor lightYellowColor] set];
- CGSize s = [_text sizeWithFont:self.font];
- CGFloat yOffset = (roundedRect.size.height - s.height) / 2;
- CGRect textRect = CGRectMake(roundedRect.origin.x, yOffset, roundedRect.size.width, s.height);
-
- [_text drawInRect:textRect
- withFont:self.font
- lineBreakMode:UILineBreakModeWordWrap
- alignment:UITextAlignmentCenter];
- }
-}
-
-@end
-
-#pragma mark -
-#pragma mark MNEValueTrackingSlider implementations
-@implementation ValueTrackingSliderView
-
-@synthesize thumbRect, textValue;
-
-#pragma Private methods
-
--(void) _constructSlider {
- valuePopupView = [[SliderValuePopupView alloc] initWithFrame:CGRectZero];
- valuePopupView.backgroundColor = [UIColor clearColor];
- valuePopupView.alpha = 0.0;
- [self addSubview:valuePopupView];
-}
-
--(void) _fadePopupViewInAndOut:(BOOL)aFadeIn {
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationDuration:0.25];
- if (aFadeIn) {
- valuePopupView.alpha = 1.0;
- } else {
- valuePopupView.alpha = 0.0;
- }
- [UIView commitAnimations];
-}
-
--(void) _positionAndUpdatePopupView {
- CGRect _thumbRect = self.thumbRect;
- CGRect popupRect = CGRectOffset(_thumbRect, 0, -floorf(_thumbRect.size.height * 1.5));
- valuePopupView.frame = CGRectInset(popupRect, -100, -15);
- valuePopupView.text = self.textValue;
- [valuePopupView setNeedsDisplay];
-}
-
-#pragma mark Memory management
-
--(id) initWithFrame:(CGRect) frame {
- self = [super initWithFrame:frame];
- if (self) {
- [self _constructSlider];
- }
- return self;
-}
-
--(id) initWithCoder:(NSCoder *)aDecoder {
- self = [super initWithCoder:aDecoder];
- if (self) {
- [self _constructSlider];
- }
- return self;
-}
-
--(void) dealloc {
- [valuePopupView release];
- [textValue release];
- [super dealloc];
-}
-
-#pragma mark -
-#pragma mark UIControl touch event tracking
--(BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
- // Fade in and update the popup view
- CGPoint touchPoint = [touch locationInView:self];
- // Check if the knob is touched. Only in this case show the popup-view
- if(CGRectContainsPoint(CGRectInset(self.thumbRect, -12.0, -12.0), touchPoint)) {
- [self _positionAndUpdatePopupView];
- [self _fadePopupViewInAndOut:YES];
- }
- return [super beginTrackingWithTouch:touch withEvent:event];
-}
-
--(BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
- // Update the popup view as slider knob is being moved
- [self _positionAndUpdatePopupView];
- return [super continueTrackingWithTouch:touch withEvent:event];
-}
-
--(void) cancelTrackingWithEvent:(UIEvent *)event {
- [super cancelTrackingWithEvent:event];
-}
-
--(void) endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
- // Fade out the popoup view
- [self _fadePopupViewInAndOut:NO];
- [super endTrackingWithTouch:touch withEvent:event];
-}
-
-#pragma mark -
-#pragma mark Custom property accessors
--(CGRect) thumbRect {
- CGRect trackRect = [self trackRectForBounds:self.bounds];
- CGRect thumbR = [self thumbRectForBounds:self.bounds
- trackRect:trackRect
- value:self.value];
- return thumbR;
-}
-
-@end