27 Commits

Author SHA1 Message Date
Brandon McQuilkin d8366e13b3 Remove artwork, and create non-buggy example project. 2015-11-28 12:45:03 -05:00
Brandon McQuilkin 7168ea9816 Updated to-do list. 2015-10-15 14:20:48 -04:00
Brandon McQuilkin c60dadedcb Removed duplicate of M13ProgressView file. 2015-10-13 15:10:10 -04:00
Brandon McQuilkin 045d8993a8 Fix indentation. 2015-10-13 15:00:35 -04:00
Brandon McQuilkin c09eab3cbd Merge pull request #92 from Marxon13/fix-branch
Fix branch
2015-10-13 14:59:31 -04:00
Brandon McQuilkin 918abe1bed Indent all the things. 2015-10-13 14:58:24 -04:00
Brandon McQuilkin 5f1111d5a6 Add whitespace 2015-10-13 14:56:31 -04:00
Brandon McQuilkin 06a9ea7ef1 Updated podspec 2015-10-13 14:24:37 -04:00
Brandon McQuilkin 4d981288d3 Updated HUD 2015-10-13 14:09:50 -04:00
Brandon McQuilkin 48b06b175f Fixed corrupted xcode project. 2015-10-12 13:08:30 -04:00
Brandon McQuilkin 0e09f90a6b Merge remote-tracking branch 'origin/swift' into swift
Conflicts:
	M13ProgressSuite.xcodeproj/project.pbxproj
2015-10-12 13:02:11 -04:00
Brandon McQuilkin fb5aa1c791 Added new HUD base. 2015-10-12 13:01:50 -04:00
Brandon McQuilkin e69fd0437d Merge pull request #89 from blueheronlabs/devel/progress-image
Added M13ProgressImage and M13ProgressFilteredImage
2015-10-12 10:45:44 -04:00
Phill Zarfos 3fd906b8e5 Added M13ProgressImage and M13ProgressFilteredImage 2015-10-12 09:44:37 -04:00
Brandon McQuilkin eba12144d0 Bordered Bar border color now updates when changed 2015-10-08 18:26:22 -04:00
Brandon McQuilkin 0a24eb25b4 Fixed issue where corner radius does not change. 2015-10-08 18:26:22 -04:00
Brandon McQuilkin 19239cc1f8 Merge pull request #87 from blueheronlabs/devel/progress-circular
M13ProgressSegmentedRing and M13ProgressPie
2015-10-08 08:07:31 -04:00
Phill Zarfos b6ecb65e1b - added M13ProgressSegmentedRing and M13ProgressPie classes;
- now deriving Ring and Pie classes from a common M13ProgressCircular class
2015-10-07 20:27:53 -04:00
Brandon McQuilkin ec9128fdca Fixed missing font icons. 2015-10-07 13:51:04 -04:00
Brandon McQuilkin 9fa3a80c15 Added the indeterminate animation duration. 2015-10-07 13:43:55 -04:00
Brandon McQuilkin 4cc77ad643 Added support for swapping out progress bars. 2015-10-07 13:43:55 -04:00
Brandon McQuilkin bb33e1a249 Merge pull request #86 from blueheronlabs/devel/progress-ring
Added progress ring for Swift
2015-10-05 11:05:47 -04:00
Phill Zarfos 0641902706 Added progress ring 2015-10-02 15:54:31 -04:00
Brandon McQuilkin d51a35b59f Added bordered progress bar 2015-09-14 15:03:50 -04:00
Brandon McQuilkin 0e423175cd Fixed layout issues
Used the wrong layout method to layout the subviews.
2015-09-14 15:03:36 -04:00
Brandon McQuilkin 1dab61273a Colors now set properly. 2015-09-13 14:51:36 -04:00
Brandon McQuilkin 06c0796405 Initial 2.0.0 Commit 2015-09-13 14:12:15 -04:00
265 changed files with 5642 additions and 63492 deletions
-69
View File
@@ -1,69 +0,0 @@
//
// M13ProgressConsole.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <UIKit/UIKit.h>
#import "M13ProgressView.h"
typedef enum {
M13ProgressConsoleMaskTypeNone,
M13ProgressConsoleMaskTypeSolidColor,
M13ProgressConsoleMaskTypeIOS7Blur
} M13ProgressConsoleMaskType;
typedef enum {
M13ProgressConsoleProgressTypePercentage,
M13ProgressConsoleProgressTypeDots,
M13ProgressConsoleProgressTypeBarOfDots
} M13ProgressConsoleProgressType;
/**A progress view that shows progress in the style of terminal.*/
@interface M13ProgressConsole : UITextView;
/**@name Progress*/
/**The progress displayed to the user.*/
@property (nonatomic, readonly) CGFloat progress;
/**Wether or not the progress view is indeterminate.*/
@property (nonatomic, assign) BOOL indeterminate;
/**Show progress at the end of each line.*/
@property (nonatomic, assign) M13ProgressConsoleProgressType progressType;
/**@name Appearance*/
/**The background type of the console.*/
@property (nonatomic, assign) M13ProgressConsoleMaskType maskType;
/**The color of the mask if set to solid color.*/
@property (nonatomic, retain) UIColor *maskColor;
/**Wether or not to show the cursor.*/
@property (nonatomic, assign) BOOL showCursor;
/**The prefix string for each line.*/
@property (nonatomic, retain) NSString *prefix;
/**The array containing all the lines displyed.*/
@property (nonatomic, retain) NSArray *lines;
/**@name Properties*/
/**The durations of animations in seconds.*/
@property (nonatomic, assign) CGFloat animationDuration;
/**@name Actions*/
/**Set the progress of the `M13ProgressView`.
@param progress The progress to show on the current line.*/
- (void)setProgress:(CGFloat)progress;
/**Set the text of the current line.
@param currentLine The string to replace the current line with.*/
- (void)setCurrentLine:(NSString *)currentLine;
/**Add a new line with the given text.
@param newLine The text to start a new line with.*/
- (void)addNewLineWithString:(NSString *)newLine;
/**Clears the console.*/
- (void)clear;
@end
-344
View File
@@ -1,344 +0,0 @@
//
// M13ProgressConsole.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressConsole.h"
#import "UIImage+ImageEffects.h"
@interface M13ProgressConsole ()
@property (nonatomic, readwrite) CGFloat progress;
@end
@implementation M13ProgressConsole
{
NSMutableArray *_mutableLines;
NSMutableArray *_lineSuffixes;
NSMutableArray *_linePrefixes;
NSMutableString *_allPreviousLines;
NSTimer *updateTimer;
int indeterminateOffset;
}
#pragma mark Initalization and Setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set defaults
_progressType = M13ProgressConsoleProgressTypePercentage;
_maskType = M13ProgressConsoleMaskTypeSolidColor;
_maskColor = [UIColor colorWithWhite:0.0 alpha:0.75];
self.font = [UIFont systemFontOfSize:14.0];
self.textColor = [UIColor whiteColor];
self.backgroundColor = [UIColor blackColor];
_showCursor = YES;
_mutableLines = [NSMutableArray array];
_lineSuffixes = [NSMutableArray array];
_linePrefixes = [NSMutableArray array];
_allPreviousLines = [NSMutableString string];
_animationDuration = .1;
self.userInteractionEnabled = NO;
}
#pragma marks Properties
- (void)setProgressType:(M13ProgressConsoleProgressType)progressType
{
_progressType = progressType;
//Clear the suffix for the current line
[_lineSuffixes removeLastObject];
}
- (void)setMaskType:(M13ProgressConsoleMaskType)maskType
{
_maskType = maskType;
if (_maskType == M13ProgressConsoleMaskTypeNone) {
self.backgroundColor = [UIColor clearColor];
} else if (_maskType == M13ProgressConsoleMaskTypeSolidColor) {
self.backgroundColor = _maskColor;
} else if (_maskType == M13ProgressConsoleMaskTypeIOS7Blur) {
//Get the snapshot of the mask
__block UIImage *image = [self snapshotForBlurredBackgroundInView:self];
if (image != nil) {
//Apply the filters to blur the image
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
image = [image applyLightEffect];
dispatch_async(dispatch_get_main_queue(), ^{
// Fade on content's change, if there was already an image.
CATransition *transition = [CATransition new];
transition.duration = 0.3;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[self.layer addAnimation:transition forKey:nil];
self.backgroundColor = [UIColor colorWithPatternImage:image];
});
});
}
}
}
- (void)setMaskColor:(UIColor *)maskColor
{
_maskColor = maskColor;
if (_maskType == M13ProgressConsoleMaskTypeSolidColor) {
self.backgroundColor = _maskColor;
}
}
- (void)setShowCursor:(BOOL)showCursor
{
_showCursor = showCursor;
}
- (void)setPrefix:(NSString *)prefix
{
_prefix = prefix;
if (_prefix == nil) {
_prefix = @"";
}
}
- (NSArray *)lines
{
return [_mutableLines copy];
}
- (void)setLines:(NSArray *)lines
{
_mutableLines = [lines mutableCopy];
}
#pragma mark Actions
- (void)setIndeterminate:(BOOL)indeterminate
{
_indeterminate = indeterminate;
if (_indeterminate && !updateTimer) {
updateTimer = [NSTimer timerWithTimeInterval:_animationDuration target:self selector:@selector(updateCurrentLine) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:updateTimer forMode:NSRunLoopCommonModes];
} else if (!_indeterminate && updateTimer) {
[updateTimer invalidate];
updateTimer = nil;
indeterminateOffset = 0;
}
}
- (void)setProgress:(CGFloat)progress
{
if (progress > 1) {
progress = 1;
}
_progress = progress;
[self updateCurrentLine];
}
- (void)setCurrentLine:(NSString *)currentLine
{
[_mutableLines replaceObjectAtIndex:(_mutableLines.count - 1) withObject:currentLine];
[self updateCurrentLine];
}
- (void)addNewLineWithString:(NSString *)newLine
{
//Add the current line to the all previous lines string
if (_mutableLines.count != 0) {
[_allPreviousLines appendFormat:@"%@%@%@\n", _linePrefixes.lastObject, _mutableLines.lastObject, _lineSuffixes.lastObject];
}
//Create the new line
[_mutableLines addObject:newLine];
[_linePrefixes addObject:[_prefix copy]];
[_lineSuffixes addObject:@""];
_progress = 0.0;
[self updateCurrentLine];
}
- (void)clear
{
self.text = nil;
self.indeterminate = NO;
_allPreviousLines = [[NSMutableString alloc] init];
_linePrefixes = [[NSMutableArray alloc] init];
_lineSuffixes = [[NSMutableArray alloc] init];
_mutableLines = [[NSMutableArray alloc] init];
}
#pragma mark Drawing
- (void)update
{
NSMutableString *newString = [[NSMutableString alloc] init];
_allPreviousLines = [NSMutableString string];
for (int i = 0; i < _mutableLines.count; i++) {
NSMutableString *newLine = [NSMutableString string];
[newLine appendString:_linePrefixes[i]];
[newLine appendString:_mutableLines[i]];
[newLine appendString:_lineSuffixes[i]];
[newLine appendString:@"\n"];
[newString appendString:newLine];
if (i != _mutableLines.count - 1) {
[_allPreviousLines appendString:newLine];
}
}
self.text = newString;
[self scrollRectToVisible:CGRectMake(0, self.frame.size.height, 0, 0) animated:NO];
}
- (void)updateCurrentLine
{
NSMutableString *currentText = [[NSMutableString alloc] initWithString:_allPreviousLines];
[currentText appendString:_linePrefixes.lastObject];
[currentText appendString:_mutableLines.lastObject];
//Calculate suffix
if (_progressType == M13ProgressConsoleProgressTypeDots && (_progress != 0 || _indeterminate)) {
NSString *suffix = [self dotsProgressString];
[_lineSuffixes replaceObjectAtIndex:(_lineSuffixes.count - 1) withObject:suffix];
[currentText appendString:suffix];
} else if (_progressType == M13ProgressConsoleProgressTypePercentage && (_progress != 0 || _indeterminate)) {
NSString *suffix = [self percentageProgressString];
[_lineSuffixes replaceObjectAtIndex:(_lineSuffixes.count - 1) withObject:suffix];
[currentText appendString:suffix];
} else if (_progressType == M13ProgressConsoleProgressTypeBarOfDots && (_progress != 0 || _indeterminate)) {
NSString *suffix = [self barOfDotsProgressString];
[_lineSuffixes replaceObjectAtIndex:(_lineSuffixes.count - 1) withObject:suffix];
[currentText appendString:suffix];
}
self.text = currentText;
[self scrollRectToVisible:CGRectMake(0, self.frame.size.height, 0, 0) animated:NO];
}
- (NSString *)dotsProgressString
{
NSMutableString *string = [[NSMutableString alloc] initWithString:@"\n"];
if (!_indeterminate) {
for (float f = 0; f <= 1; f += .05) {
if (f <= _progress) {
[string appendString:@"."];
} else {
continue;
}
}
} else {
if (indeterminateOffset > 24) {
indeterminateOffset = 0;
}
for (int i = 0; i < 20; i++) {
if (i <= indeterminateOffset && i > indeterminateOffset - 5) {
[string appendString:@"."];
} else {
[string appendString:@" "];
}
}
indeterminateOffset += 1;
}
return string;
}
- (NSString *)percentageProgressString
{
if (!_indeterminate) {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterPercentStyle;
return [NSString stringWithFormat:@"\n%@",[formatter stringFromNumber:[NSNumber numberWithFloat:_progress]]];
} else {
return @"\n??%";
}
}
- (NSString *)barOfDotsProgressString
{
NSMutableString *string = [[NSMutableString alloc] initWithString:@"\n"];
if (!_indeterminate) {
for (float f = 0; f <= 1; f += .05) {
if (f <= _progress) {
[string appendString:@""];
} else {
[string appendString:@"."];
}
}
} else {
if (indeterminateOffset > 24) {
indeterminateOffset = 0;
}
for (int i = 0; i < 20; i++) {
if (i <= indeterminateOffset && i > indeterminateOffset - 5) {
[string appendString:@""];
} else {
[string appendString:@"."];
}
}
indeterminateOffset += 1;
}
return string;
}
- (UIImage *)snapshotForBlurredBackgroundInView:(UIView *)view
{
//Translate the view's rect to the superview's rect
CGRect viewRect = view.bounds;
viewRect = [view convertRect:viewRect toView:self.superview];
//Hide self if visible
BOOL previousViewState = self.hidden;
self.hidden = YES;
//Create a snapshot of the superview
UIView *snapshotView = [self.superview resizableSnapshotViewFromRect:viewRect afterScreenUpdates:YES withCapInsets:UIEdgeInsetsZero];
//Draw the snapshot view into a UIImage
UIGraphicsBeginImageContextWithOptions(snapshotView.bounds.size, YES, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, viewRect.origin.x, viewRect.origin.y);
BOOL result = [self.superview drawViewHierarchyInRect:viewRect afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Return self to the previous state
self.hidden = previousViewState;
if (result) {
return image;
} else {
return nil;
}
}
@end
+236
View File
@@ -0,0 +1,236 @@
//
// M13HUDController.swift
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 10/8/15.
// Copyright © 2015 Brandon McQuilkin. All rights reserved.
//
import UIKit
/**
The possible positions the status title and message can be in.
- BelowProgress: The text will be below the progress view.
- AboveProgress: The text will be above the progress view.
- LeadingProgress: The text will lead the progress view.
- TrailingProgress: The text will trail the progress view.
*/
public enum M13HUDStatusTextPosition: Int, RawRepresentable {
/// The text will be below the progress view.
case BelowProgress
/// The text will be above the progress view.
case AboveProgress
/// The text will lead the progress view.
case LeadingProgress
/// The text will trail the progress view.
case TrailingProgress
}
/**
The pre-defined background styles for the HUD. Pass one of these values on initalization to have the background view set up for you.
- None: Do not add any content to the `backgroundView`.
- SolidColor: Set up the `backgroundView` with a solid color background.
- LightVisualEffectView: Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with `UIBlurEffectStyleLight` as an option.
- ExtraLightVisualEffectView: Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with `UIBlurEffectStyleExtraLight` as an option.
- DarkVisualEffectView: Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with `UIBlurEffectStyleDark` as an option.
- LightVibrantVisualEffectView: Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with a `UIVibrancyEffect` with `UIBlurEffectStyleLight` as an option.
- ExtraLightVibrantVisualEffectView: Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with a `UIVibrancyEffect` with `UIBlurEffectStyleExtraLight` as an option.
- DarkVibrantVisualEffectView: Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with a `UIVibrancyEffect` with `UIBlurEffectStyleDark` as an option.
*/
public enum M13HUDBackgroundStyle: Int, RawRepresentable {
/// Do not add any content to the `backgroundView`.
case None
/// Set up the `backgroundView` with a solid color background.
case SolidColor
/// Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with `UIBlurEffectStyleLight` as an option.
case LightVisualEffectView
/// Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with `UIBlurEffectStyleExtraLight` as an option.
case ExtraLightVisualEffectView
/// Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with `UIBlurEffectStyleDark` as an option.
case DarkVisualEffectView
/// Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with a `UIVibrancyEffect` with `UIBlurEffectStyleLight` as an option.
case LightVibrantVisualEffectView
/// Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with a `UIVibrancyEffect` with `UIBlurEffectStyleExtraLight` as an option.
case ExtraLightVibrantVisualEffectView
/// Set up the `backgroundView` with a `UIVisualEffectView` subview initalized with a `UIVibrancyEffect` with `UIBlurEffectStyleDark` as an option.
case DarkVibrantVisualEffectView
}
/**
The possible overlay styles of the HUD.
- FullScreen: The HUD extends over the entire screen.
- Rect: The HUD will be a rectangle.
- SquareRect: The HUD will be a square.
- RoundedRect: The HUD will be a rectangle with rounded corners.
- RoundedSquareRect: The HUD will be a square with rounded corners.
*/
public enum M13HUDOverlayStyle: Int, RawRepresentable {
/// The HUD extends over the entire screen.
case FullScreen
/// The HUD will be a rectangle.
case Rect
/// The HUD will be a square.
case SquareRect
/// The HUD will be a rectangle with rounded corners.
case RoundedRect
/// The HUD will be a square with rounded corners.
case RoundedSquareRect
}
/**
A customizable view controller that presents an HUD. Works similarly to `UIAlertController`.
*/
public class M13HUDController: UIViewController {
//-------------------------------
// MARK: Appearance
//-------------------------------
/**
The position of the title text relative to the progress view.
*/
public var titlePosition: M13HUDStatusTextPosition = M13HUDStatusTextPosition.AboveProgress
/**
The position of the message text relative to the progress view.
*/
public var messagePosition: M13HUDStatusTextPosition = M13HUDStatusTextPosition.BelowProgress
//-------------------------------
// MARK: Properties
//-------------------------------
/**
The message to the user.
*/
public var message: String?
/**
The view that contains the background view and the content view.
*/
public let containerView: UIView = UIView()
/**
The view that is the background view. Add any background content to this view.
*/
public let backgroundView: UIView = UIView()
//-------------------------------
// MARK: Initalization
//-------------------------------
convenience init(backgroundStyle: M13HUDBackgroundStyle) {
self.init(overlayStyle: M13HUDOverlayStyle.RoundedSquareRect, backgroundStyle: backgroundStyle)
}
convenience init(overlayStyle: M13HUDOverlayStyle) {
self.init(overlayStyle: overlayStyle, backgroundStyle: M13HUDBackgroundStyle.LightVisualEffectView)
}
convenience init(overlayStyle: M13HUDOverlayStyle, backgroundStyle: M13HUDBackgroundStyle) {
self.init(nibName: nil, bundle: nil)
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
sharedSetup()
}
override public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
sharedSetup()
}
private func sharedSetup() {
// Present over a full screen, as this has the posibility of being semi-transparent.
modalPresentationStyle = UIModalPresentationStyle.OverFullScreen
// Add the necessary views
view.addSubview(containerView)
containerView.addSubview(backgroundView)
var constraints: [NSLayoutConstraint] = NSLayoutConstraint.constraintsWithVisualFormat("H:|[backgroundView]|", options: NSLayoutFormatOptions.AlignAllCenterY, metrics: nil, views: ["backgroundView": backgroundView])
constraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|[backgroundView]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["backgroundView": backgroundView])
NSLayoutConstraint.activateConstraints(constraints)
}
//-------------------------------
// MARK: Initalization Presets
//-------------------------------
private func setupPresetBackground(backgroundStyle: M13HUDBackgroundStyle) {
switch(backgroundStyle) {
case .SolidColor:
backgroundView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.3)
break
case .LightVisualEffectView:
setupBackgroundViewWithVisualEffectView(UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.Light)))
break
case .ExtraLightVisualEffectView:
setupBackgroundViewWithVisualEffectView(UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.ExtraLight)))
break
case .DarkVisualEffectView:
setupBackgroundViewWithVisualEffectView(UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.Dark)))
break
case .LightVibrantVisualEffectView:
setupBackgroundViewWithVisualEffectView(UIVisualEffectView(effect: UIVibrancyEffect(forBlurEffect: UIBlurEffect(style: UIBlurEffectStyle.Light))))
break
case .ExtraLightVibrantVisualEffectView:
setupBackgroundViewWithVisualEffectView(UIVisualEffectView(effect: UIVibrancyEffect(forBlurEffect: UIBlurEffect(style: UIBlurEffectStyle.ExtraLight))))
break
case .DarkVibrantVisualEffectView:
setupBackgroundViewWithVisualEffectView(UIVisualEffectView(effect: UIVibrancyEffect(forBlurEffect: UIBlurEffect(style: UIBlurEffectStyle.Dark))))
break
case .None:
// Do nothing
break
}
}
private func setupBackgroundViewWithVisualEffectView(view: UIVisualEffectView) {
backgroundView.addSubview(view)
var constraints: [NSLayoutConstraint] = NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: NSLayoutFormatOptions.AlignAllCenterY, metrics: nil, views: ["view": view])
constraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["view": view])
NSLayoutConstraint.activateConstraints(constraints)
}
private func setupConstraintsForOverlayStyle(style: M13HUDOverlayStyle) {
switch(style) {
case .FullScreen:
break
case .Rect:
break
case .SquareRect:
break
case .RoundedRect:
break
case .RoundedSquareRect:
break
}
}
//-------------------------------
// MARK: Actions
//-------------------------------
//-------------------------------
// MARK: Layout
//-------------------------------
//-------------------------------
// MARK: Other
//-------------------------------
}
-133
View File
@@ -1,133 +0,0 @@
//
// M13ProgressViewHUD.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <UIKit/UIKit.h>
#import "M13ProgressView.h"
typedef enum {
M13ProgressHUDStatusPositionBelowProgress,
M13ProgressHUDStatusPositionAboveProgress,
M13ProgressHUDStatusPositionLeftOfProgress,
M13ProgressHUDStatusPositionRightOfProgress
} M13ProgressHUDStatusPosition;
typedef enum {
M13ProgressHUDMaskTypeNone,
M13ProgressHUDMaskTypeSolidColor,
M13ProgressHUDMaskTypeGradient,
M13ProgressHUDMaskTypeIOS7Blur
} M13ProgressHUDMaskType;
/**A progress HUD to display progress, and a description over a window or view.*/
@interface M13ProgressHUD : UIView
/**@name Initalization*/
/**Initalize the HUD with a customized progress view.
@param progressView The progres view to display in the HUD.
@note If you create the HUD with this method, you are responsible for creating the progress view and setting the frame size of the progress view.*/
- (id)initWithProgressView:(M13ProgressView *)progressView;
/**Initalize and show the hud with parameters.
@param progressView The progress view to show in the HUD.
@param indeterminate Wether or not the progress view is indeterminate.
@param progress The progress to display in the progress view.
@param status The status to display in the HUD.
@param maskType The type of mask to use for the HUD.
@param view The view to show the HUD in.
@return A instance of M13PRogressHUD*/
- (id)initAndShowWithProgressView:(M13ProgressView *)progressView progress:(CGFloat)progress indeterminate:(BOOL)indeterminate status:(NSString *)status mask:(M13ProgressHUDMaskType)maskType inView:(UIView *)view;
/**@name Progress View Convienence Properties*/
/**The progress view displaied.*/
@property (nonatomic, retain) M13ProgressView *progressView;
/**The primary color of the `M13ProgressView`.*/
@property (nonatomic, retain) UIColor *primaryColor;
/**The secondary color of the `M13ProgressView`.*/
@property (nonatomic, retain) UIColor *secondaryColor;
/**The progress displayed to the user.*/
@property (nonatomic, readonly) CGFloat progress;
/**Wether or not the progress view is indeterminate.*/
@property (nonatomic, assign) BOOL indeterminate;
/**@name Appearance*/
/**Wether or not a iOS7 style blur is applied to the HUD.*/
@property (nonatomic, assign) BOOL applyBlurToBackground;
/**The color of the background.*/
@property (nonatomic, retain) UIColor *hudBackgroundColor;
/**The location of the status label in comparison to the progress view.*/
@property (nonatomic, assign) M13ProgressHUDStatusPosition statusPosition;
/**The offset distance of the HUD from the center of its superview.*/
@property (nonatomic, assign) UIOffset offsetFromCenter;
/**The margin between the edge of the HUD and it's progress view and status label.*/
@property (nonatomic, assign) CGFloat contentMargin;
/**The corner radius of the HUD view.*/
@property (nonatomic, assign) CGFloat cornerRadius;
/**The type of mask the HUD displays over the view's content.*/
@property (nonatomic, assign) M13ProgressHUDMaskType maskType;
/**The color of the HUD mask if set to Solid Color or Gradient.*/
@property (nonatomic, retain) UIColor *maskColor;
/**The color of the status text.*/
@property (nonatomic, retain) UIColor *statusColor;
/**The font to display the status label with.*/
@property (nonatomic, retain) UIFont *statusFont;
/**The size of the progress view.*/
@property (nonatomic, assign) CGSize progressViewSize;
/**The origin of the show/hide animation. show: will animate from this point, and hide: will animate to this point.*/
@property (nonatomic, assign) CGPoint animationPoint;
/**@name Properties*/
/**The durations of animations in seconds.*/
@property (nonatomic, assign) CGFloat animationDuration;
/**The text displayed in the HUD to provide more information to the user.*/
@property (nonatomic, retain) NSString *status;
/**Minimum size of the HUD.
@note If the content is smaller than the minimum size, the HUD will be the minimum size. If larger than the minimum size, the HUD will expand to fit it's content, with a maximum size of its super view.*/
@property (nonatomic, assign) CGSize minimumSize;
/**Wether or not to dismiss automatically after an action is performed.*/
@property (nonatomic, assign) BOOL dismissAfterAction;
/**Wether or not the HUD is currenty visible.*/
- (BOOL)isVisible;
/**Wether or not the HUD will auto rotate to the device orientation.
@note If set to `YES`, The HUD will rotate automatically to the device orientation, regardless of the interface orientation. This setting is suggested if the displayed view controller rotates and the HUD is displayed in a UIWindow. If the HUD is contained in a UIViewController. This setting should be set to NO, and the rotation should be set manually via the rotation property.
*/
@property (nonatomic, assign) BOOL shouldAutorotate;
/**The orientation of the HUD.*/
@property (nonatomic, assign) UIInterfaceOrientation orientation;
/**@name Actions*/
/**Set the progress of the `M13ProgressView`.
@param progress The progress to show on the progress view.
@param animated Wether or not to animate the progress change.*/
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated;
/**Perform the given action if defined. Usually showing success or failure.
@param action The action to perform.
@param animated Wether or not to animate the change*/
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated;
/**Show the progress HUD.
@param animated Wether or not to animate the change*/
- (void)show:(BOOL)animated;
/**Hide the progress HUD.
@note This method should be used when the HUD is going to be reused. When the HUD needs to be shown again, use `show:` do not initalize another instance. That will cause a memory leak. If the HUD is not going to be reused, use `dismiss:` instead. To retreive a hidden HUD, either hold onto it with a global variable, or use the `progressHUD` method for UIView.
@param animated Wether or not to animate the change*/
- (void)hide:(BOOL)animated;
/**Dismiss the progress HUD and remove it from its superview.
@param animated Wether or not to animate the change*/
- (void)dismiss:(BOOL)animated;
@end
@interface UIView (M13ProgressHUD)
/*Retreive the topmost progress hud in the receiver view stack.*/
- (M13ProgressHUD *)progressHUD;
@end
-802
View File
@@ -1,802 +0,0 @@
//
// M13ProgressViewHUD.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressHUD.h"
#import "UIImage+ImageEffects.h"
@interface M13ProgressHUD ()
@property (nonatomic, readwrite) CGFloat progress;
@end
@implementation M13ProgressHUD
{
UIView *backgroundView;
UIView *maskView;
UILabel *statusLabel;
NSString *optimalStatusString;
BOOL onScreen;
}
#pragma mark Initalization and Setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (id)initWithProgressView:(M13ProgressView *)progressView
{
self = [self init];
if (self) {
_progressView = progressView;
[self setup];
}
return self;
}
- (id)initAndShowWithProgressView:(M13ProgressView *)progressView progress:(CGFloat)progress indeterminate:(BOOL)indeterminate status:(NSString *)status mask:(M13ProgressHUDMaskType)maskType inView:(UIView *)view
{
self = [super init];
if (self) {
_progressView = progressView;
[self setup];
self.progress = progress;
self.indeterminate = indeterminate;
self.status = status;
self.maskType = maskType;
[view addSubview:self];
[self show:YES];
}
return self;
}
- (void)setup
{
//Set the defaults for the progress view
self.backgroundColor = [UIColor clearColor];
self.layer.opacity = 0;
_primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
_secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
_progress = 0;
_indeterminate = NO;
_shouldAutorotate = YES;
if (self.frame.size.height != 0 && self.frame.size.width != 0) {
_progressViewSize = CGSizeMake(150 / 4, 150 / 4);
}
_animationDuration = .3;
//Set the other defaults
_applyBlurToBackground = NO;
_statusPosition = M13ProgressHUDStatusPositionBelowProgress;
_contentMargin = 20.0;
_cornerRadius = 20.0;
_maskType = M13ProgressHUDMaskTypeNone;
_maskColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:.5];
_statusColor = [UIColor whiteColor];
_statusFont = [UIFont systemFontOfSize:20.0];
_minimumSize = CGSizeMake(150, 150);
_dismissAfterAction = NO;
_hudBackgroundColor = [UIColor colorWithWhite:0 alpha:.8];
//Add the proper views
maskView = [[UIView alloc] init];
[self addSubview:maskView];
backgroundView = [[UIView alloc] init];
backgroundView.backgroundColor = _hudBackgroundColor;
backgroundView.layer.cornerRadius = _cornerRadius;
backgroundView.clipsToBounds = YES;
[self addSubview:backgroundView];
statusLabel = [[UILabel alloc] init];
statusLabel.font = _statusFont;
statusLabel.textColor = _statusColor;
statusLabel.textAlignment = NSTextAlignmentCenter;
statusLabel.contentMode = UIViewContentModeTop;
statusLabel.lineBreakMode = NSLineBreakByWordWrapping;
statusLabel.numberOfLines = 0;
[backgroundView addSubview:statusLabel];
if (_progressView != nil) {
[backgroundView addSubview:_progressView];
}
}
#pragma marks Properties
- (void)setProgressView:(M13ProgressView *)progressView
{
if (_progressView) {
[_progressView removeFromSuperview];
}
[backgroundView addSubview:progressView];
[self setNeedsLayout];
}
- (void)setPrimaryColor:(UIColor *)primaryColor
{
_primaryColor = primaryColor;
_progressView.primaryColor = _primaryColor;
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
_secondaryColor = secondaryColor;
_progressView.secondaryColor = _secondaryColor;
}
- (void)setApplyBlurToBackground:(BOOL)applyBlurToBackground
{
_applyBlurToBackground = applyBlurToBackground;
//Only needs to be redrawn if visible
if ([self isVisible]) {
[self drawBackground];
}
}
- (void)setStatusPosition:(M13ProgressHUDStatusPosition)statusPosition
{
_statusPosition = statusPosition;
[self setNeedsLayout];
}
- (void)setOffsetFromCenter:(UIOffset)offsetFromCenter
{
_offsetFromCenter = offsetFromCenter;
[self setNeedsLayout];
}
- (void)setContentMargin:(CGFloat)contentMargin
{
_contentMargin = contentMargin;
[self setNeedsLayout];
}
- (void)setCornerRadius:(CGFloat)cornerRadius
{
_cornerRadius = cornerRadius;
backgroundView.layer.cornerRadius = cornerRadius;
}
- (void)setMaskType:(M13ProgressHUDMaskType)maskType
{
_maskType = maskType;
[self drawMask];
}
- (void)setMaskColor:(UIColor *)maskColor
{
_maskColor = maskColor;
[self drawMask];
}
- (void)setStatusColor:(UIColor *)statusColor
{
_statusColor = statusColor;
statusLabel.textColor = _statusColor;
}
- (void)setStatusFont:(UIFont *)statusFont
{
_statusFont = statusFont;
statusLabel.font = _statusFont;
[self layoutSubviews];
}
- (void)setAnimationDuration:(CGFloat)animationDuration
{
_animationDuration = animationDuration;
_progressView.animationDuration = _animationDuration;
}
- (void)setStatus:(NSString *)status
{
_status = status;
if (_status.length == 0 || _status == nil) {
//Clear the optimal string
optimalStatusString = nil;
} else {
[self recalculateOptimalStatusStringStructure];
}
[self layoutHUD];
}
- (void)setMinimumSize:(CGSize)minimumSize
{
_minimumSize = minimumSize;
[self recalculateOptimalStatusStringStructure];
[self setNeedsLayout];
}
- (void)setDismissAfterAction:(BOOL)dismissAfterAction
{
_dismissAfterAction = dismissAfterAction;
}
- (void)setHudBackgroundColor:(UIColor *)hudBackgroundColor
{
_hudBackgroundColor = hudBackgroundColor;
if ([self isVisible]) {
[self drawBackground];
}
}
- (BOOL)isVisible
{
if (self.alpha == 1) {
return YES;
} else {
return NO;
}
}
- (void)didMoveToSuperview
{
if (_maskType == M13ProgressHUDMaskTypeIOS7Blur || _applyBlurToBackground) {\
[self setNeedsLayout];
[self redrawBlurs];
}
}
- (void)didMoveToWindow
{
if (_maskType == M13ProgressHUDMaskTypeIOS7Blur || _applyBlurToBackground) {
[self setNeedsLayout];
[self redrawBlurs];
}
}
#pragma mark Actions
- (void)setIndeterminate:(BOOL)indeterminate
{
_indeterminate = indeterminate;
_progressView.indeterminate = _indeterminate;
}
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
[_progressView setProgress:progress animated:animated];
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
[_progressView performAction:action animated:animated];
}
- (void)show:(BOOL)animated
{
//reset the blurs to the curent screen if need be
[self registerForNotificationCenter];
[self setNeedsLayout];
[self setNeedsDisplay];
onScreen = YES;
//Animate the HUD on screen
CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnimation.duration = _animationDuration;
fadeAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeAnimation.toValue = [NSNumber numberWithFloat:1.0];
fadeAnimation.removedOnCompletion = YES;
[self.layer addAnimation:fadeAnimation forKey:@"fadeAnimation"];
self.layer.opacity = 1.0;
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation.duration = _animationDuration;
scaleAnimation.fromValue = [NSNumber numberWithFloat:0.0];
scaleAnimation.toValue = [NSNumber numberWithFloat:1.0];
scaleAnimation.removedOnCompletion = YES;
CABasicAnimation *positionAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
positionAnimation.duration = _animationDuration;
positionAnimation.fromValue = [NSValue valueWithCGPoint:_animationPoint];
positionAnimation.toValue = [NSValue valueWithCGPoint:backgroundView.layer.position];
positionAnimation.removedOnCompletion = YES;
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.animations = @[scaleAnimation, positionAnimation];
animationGroup.duration = _animationDuration;
animationGroup.removedOnCompletion = YES;
[backgroundView.layer addAnimation:animationGroup forKey:nil];
}
- (void)hide:(BOOL)animated
{
[self unregisterFromNotificationCenter];
onScreen = NO;
CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnimation.fromValue = [NSNumber numberWithFloat:1.0];
fadeAnimation.toValue = [NSNumber numberWithFloat:0.0];
fadeAnimation.removedOnCompletion = YES;
[self.layer addAnimation:fadeAnimation forKey:@"fadeAnimation"];
self.layer.opacity = 0.0;
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation.fromValue = [NSNumber numberWithFloat:1.0];
scaleAnimation.toValue = [NSNumber numberWithFloat:0.0];
scaleAnimation.removedOnCompletion = YES;
CABasicAnimation *frameAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
frameAnimation.fromValue = [NSValue valueWithCGPoint:backgroundView.layer.position];
frameAnimation.toValue = [NSValue valueWithCGPoint:_animationPoint];
frameAnimation.removedOnCompletion = YES;
backgroundView.layer.position = _animationPoint;
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.animations = @[scaleAnimation, frameAnimation];
animationGroup.duration = _animationDuration;
animationGroup.removedOnCompletion = YES;
[backgroundView.layer addAnimation:animationGroup forKey:nil];
}
- (void)dismiss:(BOOL)animated
{
[self hide:animated];
//Removes the HUD from the superview, dismissing it.
[self performSelector:@selector(removeFromSuperview) withObject:Nil afterDelay:_animationDuration];
}
#pragma mark - Notifications
- (void)registerForNotificationCenter {
NSNotificationCenter *center = NSNotificationCenter.defaultCenter;
[center addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
}
- (void)unregisterFromNotificationCenter {
NSNotificationCenter *center = NSNotificationCenter.defaultCenter;
[center removeObserver:self];
}
- (void)deviceOrientationDidChange:(NSNotification *)notification {
UIDeviceOrientation deviceOrientation = [notification.object orientation];
if (_shouldAutorotate && UIDeviceOrientationIsValidInterfaceOrientation(deviceOrientation)) {
if (UIDeviceOrientationIsPortrait(deviceOrientation)) {
if (deviceOrientation == UIDeviceOrientationPortraitUpsideDown) {
_orientation = UIInterfaceOrientationPortraitUpsideDown;
} else {
_orientation = UIInterfaceOrientationPortrait;
}
} else {
if (deviceOrientation == UIDeviceOrientationLandscapeLeft) {
_orientation = UIInterfaceOrientationLandscapeLeft;
} else {
_orientation = UIInterfaceOrientationLandscapeRight;
}
}
[self layoutHUD];
}
}
#pragma mark Layout
- (void)willMoveToSuperview:(UIView *)newSuperview
{
self.frame = CGRectMake(0, 0, newSuperview.frame.size.width, newSuperview.frame.size.height);
[self layoutSubviews];
}
- (void)layoutSubviews
{
[super layoutSubviews];
[self layoutHUD];
}
- (void)layoutHUD
{
//Setup the background rect
CGRect backgroundRect = CGRectZero;
//Setup the label rect
CGRect statusRect = [optimalStatusString boundingRectWithSize:[UIScreen mainScreen].bounds.size options:(NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName : statusLabel.font} context:nil];
//Setup the progress rect
CGRect progressRect = CGRectMake(0, 0, _progressViewSize.width, _progressViewSize.height);
//Calculate the rects as per positioning
if (optimalStatusString.length != 0 && optimalStatusString != nil) {
if (_statusPosition == M13ProgressHUDStatusPositionBelowProgress) {
//Calculate background height
CGFloat backgroundRectBaseHeight = _progressViewSize.height + _contentMargin * 3;
backgroundRect.size.height = backgroundRectBaseHeight + statusRect.size.height;
if (backgroundRect.size.height < _minimumSize.height) {
backgroundRect.size.height = _minimumSize.height;
}
//Calculate background width
backgroundRect.size.width = (statusRect.size.width > _progressViewSize.width) ? statusRect.size.width : _progressViewSize.width;
backgroundRect.size.width += 2 * _contentMargin;
if (backgroundRect.size.width < _minimumSize.width) {
backgroundRect.size.width = _minimumSize.width;
}
//Calculate background origin (Calculated to keep the progress bar in the same position on the screen during frame changes.)
backgroundRect.origin.x = (self.bounds.size.width / 2.0) - (backgroundRect.size.width / 2.0);
backgroundRect.origin.y = (self.bounds.size.height / 2.0) - (backgroundRectBaseHeight / 2.0);
//Calculate the progress view rect
progressRect.origin.x = (backgroundRect.size.width / 2.0) - (progressRect.size.width / 2.0);
progressRect.origin.y = _contentMargin;
//Calculate the label rect
statusRect.origin.x = (backgroundRect.size.width / 2.0) - (statusRect.size.width / 2.0);
statusRect.origin.y = progressRect.origin.y + progressRect.size.height + _contentMargin;
} else if (_statusPosition == M13ProgressHUDStatusPositionAboveProgress) {
//Calculate background height
backgroundRect.size.height = _contentMargin + _progressViewSize.height + _contentMargin + statusRect.size.height + _contentMargin;
if (backgroundRect.size.height < _minimumSize.height) {
backgroundRect.size.height = _minimumSize.height;
}
//Calculate background width
backgroundRect.size.width = (statusRect.size.width > _progressViewSize.width) ? statusRect.size.width : _progressViewSize.width;
backgroundRect.size.width += 2 * _contentMargin;
if (backgroundRect.size.width < _minimumSize.width) {
backgroundRect.size.width = _minimumSize.width;
}
//Calculate background origin (Calculated to keep the progress bar in the same position on the screen during frame changes.)
backgroundRect.origin.x = (self.bounds.size.width / 2.0) - (backgroundRect.size.width / 2.0);
backgroundRect.origin.y = (self.bounds.size.height / 2.0) - (_minimumSize.height / 2.0);
//Calculate the label rect
statusRect.origin.x = (backgroundRect.size.width / 2.0) - (statusRect.size.width / 2.0);
statusRect.origin.y = _contentMargin;
//Calculate the progress view rect
progressRect.origin.x = (backgroundRect.size.width / 2.0) - (progressRect.size.width / 2.0);
progressRect.origin.y = statusRect.origin.y + statusRect.size.height + _contentMargin;
} else if (_statusPosition == M13ProgressHUDStatusPositionLeftOfProgress) {
//Calculate background height
backgroundRect.size.height = (statusRect.size.height > progressRect.size.height) ? statusRect.size.height : progressRect.size.height;
backgroundRect.size.height += 2 * _contentMargin;
if (backgroundRect.size.height < _minimumSize.height) {
backgroundRect.size.height = _minimumSize.height;
}
//Calculate background width
backgroundRect.size.width = _contentMargin + statusRect.size.width + _contentMargin + progressRect.size.width + _contentMargin;
if (backgroundRect.size.width < _minimumSize.width) {
backgroundRect.size.width = _minimumSize.width;
}
//Calculate background origin (Calculated to keep the progress bar in the same position on the screen during frame changes.)
backgroundRect.origin.x = (self.bounds.size.width / 2.0) - (backgroundRect.size.width / 2.0);
backgroundRect.origin.y = (self.bounds.size.height / 2.0) - (_minimumSize.height / 2.0);
//Calculate the label rect
statusRect.origin.x = _contentMargin;
statusRect.origin.y = (backgroundRect.size.height / 2.0) - (statusRect.size.height / 2.0);
//Calculate the progress view rect
progressRect.origin.x = statusRect.origin.x + statusRect.size.width + _contentMargin;
progressRect.origin.y = (backgroundRect.size.height / 2.0) - (progressRect.size.height / 2.0);
} else if (_statusPosition == M13ProgressHUDStatusPositionRightOfProgress) {
//Calculate background height
backgroundRect.size.height = (statusRect.size.height > progressRect.size.height) ? statusRect.size.height : progressRect.size.height;
backgroundRect.size.height += 2 * _contentMargin;
if (backgroundRect.size.height < _minimumSize.height) {
backgroundRect.size.height = _minimumSize.height;
}
//Calculate background width
backgroundRect.size.width = _contentMargin + statusRect.size.width + _contentMargin + progressRect.size.width + _contentMargin;
if (backgroundRect.size.width < _minimumSize.width) {
backgroundRect.size.width = _minimumSize.width;
}
//Calculate background origin (Calculated to keep the progress bar in the same position on the screen during frame changes.)
backgroundRect.origin.x = (self.bounds.size.width / 2.0) - (backgroundRect.size.width / 2.0);
backgroundRect.origin.y = (self.bounds.size.height / 2.0) - (_minimumSize.height / 2.0);
//Calculate the progress view rect
progressRect.origin.x = _contentMargin;
progressRect.origin.y = (backgroundRect.size.height / 2.0) - (progressRect.size.height / 2.0);
//Calculate the label rect
statusRect.origin.x = progressRect.origin.x + progressRect.size.width + _contentMargin;
statusRect.origin.y = (backgroundRect.size.height / 2.0) - (statusRect.size.height / 2.0);
}
} else {
//Calculate background height
backgroundRect.size.height = (statusRect.size.height > progressRect.size.height) ? statusRect.size.height : progressRect.size.height;
backgroundRect.size.height += 2 * _contentMargin;
if (backgroundRect.size.height < _minimumSize.height) {
backgroundRect.size.height = _minimumSize.height;
}
//Calculate background width
backgroundRect.size.width = (statusRect.size.width > _progressViewSize.width) ? statusRect.size.width : _progressViewSize.width;
backgroundRect.size.width += 2 * _contentMargin;
if (backgroundRect.size.width < _minimumSize.width) {
backgroundRect.size.width = _minimumSize.width;
}
backgroundRect.origin.x = (self.bounds.size.width / 2.0) - (backgroundRect.size.width / 2.0);
backgroundRect.origin.y = (self.bounds.size.height / 2.0) - (_minimumSize.height / 2.0);
//There is no status label text, center the progress view
progressRect.origin.x = (backgroundRect.size.width / 2.0) - (progressRect.size.width / 2.0);
progressRect.origin.y = (backgroundRect.size.height / 2.0) - (progressRect.size.height / 2.0);
statusRect.size.width = 0.0;
statusRect.size.height = 0.0;
}
//Swap height and with on rotation
if (_orientation == UIInterfaceOrientationLandscapeLeft || _orientation == UIInterfaceOrientationLandscapeRight) {
//Flip the width and height.
CGFloat temp = backgroundRect.size.width;
backgroundRect.size.width = backgroundRect.size.height;
backgroundRect.size.height = temp;
}
if (onScreen) {
//Set the frame of the background and its subviews
[UIView animateWithDuration:_animationDuration animations:^{
backgroundView.frame = CGRectIntegral(backgroundRect);
_progressView.frame = CGRectIntegral(progressRect);
backgroundView.transform = CGAffineTransformMakeRotation([self angleForDeviceOrientation]);
//Fade the label
statusLabel.alpha = 0.0;
} completion:^(BOOL finished) {
if (finished) {
//Set the label frame
statusLabel.frame = CGRectIntegral(statusRect);
statusLabel.text = optimalStatusString;
[UIView animateWithDuration:_animationDuration animations:^{
//Show the label
statusLabel.alpha = 1.0;
}];
}
}];
} else {
backgroundView.frame = CGRectIntegral(backgroundRect);
_progressView.frame = CGRectIntegral(progressRect);
backgroundView.transform = CGAffineTransformMakeRotation([self angleForDeviceOrientation]);
//Fade the label
statusLabel.alpha = 0.0;
}
}
- (void)recalculateOptimalStatusStringStructure
{
if ([_status rangeOfString:@" "].location == NSNotFound || [_status rangeOfString:@"\n"].location != NSNotFound) {
//One word, just pass the string as is.
//Or has line breaks, so follow them.
optimalStatusString = [_status copy];
} else if ([_status rangeOfString:@" "].location != NSNotFound && [_status rangeOfString:@"\n"].location == NSNotFound) {
//There are spaces, but no line breaks. Insert line breaks as needed.
//Break the status into indivual words
NSArray *wordsArray = [_status componentsSeparatedByString:@" "];
//Calculate the mean width and standard deviation to use as parameters for where line breaks should go.
float meanWidth = 0.0;
float standardDeviation = 0.0;
NSMutableArray *sizesArray = [NSMutableArray array];
//Calculate size of each word
for (NSString *word in wordsArray) {
CGRect wordRect = [word boundingRectWithSize:[UIScreen mainScreen].bounds.size options:(NSStringDrawingUsesFontLeading | NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName : statusLabel.font} context:nil];
[sizesArray addObject:NSStringFromCGRect(wordRect)];
//Sum the widths to calculate the mean width
meanWidth += wordRect.size.width;
}
//Finish the mean size and standard deviation calculations
meanWidth = roundf(meanWidth / wordsArray.count);
//Calculate the standard deviation
for (NSString *rect in sizesArray) {
CGRect theRect = CGRectFromString(rect);
//Sum the widths to calculate the mean width
standardDeviation += exp2f(theRect.size.width - meanWidth);
}
standardDeviation = sqrtf(standardDeviation / wordsArray.count);
//Correct the mean width if it is below the minimum size
if (meanWidth < _minimumSize.width) {
meanWidth = _minimumSize.width;
}
//Now calculate where to put line breaks. Lines can exceed the minimum width, but cannot exceed the minimum width plus the standard deviation. Single words can excced these limits.
NSMutableString *correctedString = [[NSMutableString alloc] initWithString:wordsArray[0]];
float lineSize = CGRectFromString(sizesArray[0]).size.width;
for (int i = 1; i < wordsArray.count; i++) {
NSString *word = wordsArray[i];
CGRect wordRect = CGRectFromString(sizesArray[i]);
if (lineSize + wordRect.size.width > meanWidth + standardDeviation) {
//If the max width is exceeded, add a new line
[correctedString appendFormat:@"\n"];
} else {
//append a space before the new word
[correctedString appendFormat:@" "];
}
//Append the string
[correctedString appendString:word];
}
//Set the optimal string
optimalStatusString = correctedString;
}
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
[self drawMask];
[self drawBackground];
}
- (void)drawBackground
{
//Set the proper color
if (_applyBlurToBackground == NO) {
backgroundView.backgroundColor = _hudBackgroundColor;
} else {
//Redraw the hud blur
[self redrawBlurs];
}
}
- (void)drawMask
{
maskView.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
if (_maskType == M13ProgressHUDMaskTypeNone) {
maskView.backgroundColor = [UIColor clearColor];
} else if (_maskType == M13ProgressHUDMaskTypeSolidColor) {
maskView.backgroundColor = _maskColor;
} else if (_maskType == M13ProgressHUDMaskTypeGradient) {
//Get the components of color of the maskColor
CGFloat red;
CGFloat green;
CGFloat blue;
CGFloat alpha;
[_maskColor getRed:&red green:&green blue:&blue alpha:&alpha];
//Create the gradient as an image, and then set it as the color of the mask view.
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
//Create the gradient
size_t locationsCount = 2;
CGFloat locations[2] = {0.0f, 1.0f};
CGFloat colors[8] = {0.0f, 0.0f, 0.0f, 0.0f, red, green, blue, alpha};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, locationsCount);
CGColorSpaceRelease(colorSpace);
//Draw the gradient
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.height / 2.0);
float radius = MIN(self.bounds.size.width , self.bounds.size.height) ;
CGContextDrawRadialGradient (context, gradient, center, 0, center, radius, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(gradient);
//Get the gradient image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Set the background
maskView.backgroundColor = [UIColor colorWithPatternImage:image];
} else if (_maskType == M13ProgressHUDMaskTypeIOS7Blur) {
// do nothing; we don't want to take a snapshot of the background for blurring now, no idea what the background is
}
}
- (void)redrawBlurs
{
if (_maskType == M13ProgressHUDMaskTypeIOS7Blur) {
//Get the snapshot of the mask
__block UIImage *image = [self snapshotForBlurredBackgroundInView:maskView];
if (image != nil) {
//Apply the filters to blur the image
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
image = [image applyLightEffect];
dispatch_async(dispatch_get_main_queue(), ^{
// Fade on content's change, if there was already an image.
CATransition *transition = [CATransition new];
transition.duration = 0.3;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[maskView.layer addAnimation:transition forKey:nil];
maskView.backgroundColor = [UIColor colorWithPatternImage:image];
});
});
}
}
if (_applyBlurToBackground) {
//Get the snapshot of the mask
__block UIImage *image = [self snapshotForBlurredBackgroundInView:backgroundView];
if (image != nil) {
//Apply the filters to blur the image
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//image = [image applyLightEffect];
image = [image applyLightEffect];
dispatch_async(dispatch_get_main_queue(), ^{
// Fade on content's change, if there was already an image.
CATransition *transition = [CATransition new];
transition.duration = 0.3;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[backgroundView.layer addAnimation:transition forKey:nil];
backgroundView.backgroundColor = [UIColor colorWithPatternImage:image];
});
});
}
}
}
- (UIImage *)snapshotForBlurredBackgroundInView:(UIView *)view
{
//Translate the view's rect to the superview's rect
CGRect viewRect = view.bounds;
viewRect = [view convertRect:viewRect toView:self.superview];
//Hide self if visible
BOOL previousViewState = self.hidden;
self.hidden = YES;
//Create a snapshot of the superview
UIView *snapshotView = [self.superview resizableSnapshotViewFromRect:viewRect afterScreenUpdates:YES withCapInsets:UIEdgeInsetsZero];
//Draw the snapshot view into a UIImage
UIGraphicsBeginImageContextWithOptions(snapshotView.bounds.size, YES, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
if (!context) {
return nil;
}
CGContextTranslateCTM(context, viewRect.origin.x, viewRect.origin.y);
BOOL result = [self.superview drawViewHierarchyInRect:viewRect afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Return self to the previous state
self.hidden = previousViewState;
if (result) {
return image;
} else {
return nil;
}
}
- (CGFloat)angleForDeviceOrientation
{
if (_orientation == UIInterfaceOrientationLandscapeLeft) {
return M_PI_2;
} else if (_orientation == UIInterfaceOrientationLandscapeRight) {
return -M_PI_2;
} else if (_orientation == UIInterfaceOrientationPortraitUpsideDown) {
return M_PI;
}
return 0;
}
@end
@implementation UIView (M13ProgressHUD)
- (M13ProgressHUD *)progressHUD
{
for (id view in self.subviews) {
//If the subview is a progress HUD return it.
if ([[view class] isSubclassOfClass:[M13ProgressHUD class]]) {
return view;
}
}
return nil;
}
@end
-107
View File
@@ -1,107 +0,0 @@
/*
File: UIImage+ImageEffects.h
Abstract: This is a category of UIImage that adds methods to apply blur and tint effects to an image. This is the code youll want to look out to find out how to use vImage to efficiently calculate a blur.
Version: 1.0
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
Inc. ("Apple") in consideration of your agreement to the following
terms, and your use, installation, modification or redistribution of
this Apple software constitutes acceptance of these terms. If you do
not agree with these terms, please do not use, install, modify or
redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2013 Apple Inc. All Rights Reserved.
Copyright © 2013 Apple Inc. All rights reserved.
WWDC 2013 License
NOTE: This Apple Software was supplied by Apple as part of a WWDC 2013
Session. Please refer to the applicable WWDC 2013 Session for further
information.
IMPORTANT: This Apple software is supplied to you by Apple Inc.
("Apple") in consideration of your agreement to the following terms, and
your use, installation, modification or redistribution of this Apple
software constitutes acceptance of these terms. If you do not agree with
these terms, please do not use, install, modify or redistribute this
Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a non-exclusive license, under
Apple's copyrights in this original Apple software (the "Apple
Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES
NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
EA1002
5/3/2013
*/
@import UIKit;
@interface UIImage (ImageEffects)
- (UIImage *)applyLightEffect;
- (UIImage *)applyExtraLightEffect;
- (UIImage *)applyDarkEffect;
- (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor;
- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage;
@end
-278
View File
@@ -1,278 +0,0 @@
/*
File: UIImage+ImageEffects.m
Abstract: This is a category of UIImage that adds methods to apply blur and tint effects to an image. This is the code youll want to look out to find out how to use vImage to efficiently calculate a blur.
Version: 1.0
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
Inc. ("Apple") in consideration of your agreement to the following
terms, and your use, installation, modification or redistribution of
this Apple software constitutes acceptance of these terms. If you do
not agree with these terms, please do not use, install, modify or
redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2013 Apple Inc. All Rights Reserved.
Copyright © 2013 Apple Inc. All rights reserved.
WWDC 2013 License
NOTE: This Apple Software was supplied by Apple as part of a WWDC 2013
Session. Please refer to the applicable WWDC 2013 Session for further
information.
IMPORTANT: This Apple software is supplied to you by Apple Inc.
("Apple") in consideration of your agreement to the following terms, and
your use, installation, modification or redistribution of this Apple
software constitutes acceptance of these terms. If you do not agree with
these terms, please do not use, install, modify or redistribute this
Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a non-exclusive license, under
Apple's copyrights in this original Apple software (the "Apple
Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES
NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE
IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
EA1002
5/3/2013
*/
#import "UIImage+ImageEffects.h"
@import Accelerate;
#import <float.h>
@implementation UIImage (ImageEffects)
- (UIImage *)applyLightEffect
{
UIColor *tintColor = [UIColor colorWithWhite:1.0 alpha:0.5];
return [self applyBlurWithRadius:30 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
}
- (UIImage *)applyExtraLightEffect
{
UIColor *tintColor = [UIColor colorWithWhite:0.97 alpha:0.82];
return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
}
- (UIImage *)applyDarkEffect
{
UIColor *tintColor = [UIColor colorWithWhite:0.11 alpha:0.73];
return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
}
- (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor
{
const CGFloat EffectColorAlpha = 0.6;
UIColor *effectColor = tintColor;
NSInteger componentCount = CGColorGetNumberOfComponents(tintColor.CGColor);
if (componentCount == 2) {
CGFloat b;
if ([tintColor getWhite:&b alpha:NULL]) {
effectColor = [UIColor colorWithWhite:b alpha:EffectColorAlpha];
}
}
else {
CGFloat r, g, b;
if ([tintColor getRed:&r green:&g blue:&b alpha:NULL]) {
effectColor = [UIColor colorWithRed:r green:g blue:b alpha:EffectColorAlpha];
}
}
return [self applyBlurWithRadius:10 tintColor:effectColor saturationDeltaFactor:-1.0 maskImage:nil];
}
- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage
{
// Check pre-conditions.
if (self.size.width < 1 || self.size.height < 1) {
NSLog (@"*** error: invalid size: (%.2f x %.2f). Both dimensions must be >= 1: %@", self.size.width, self.size.height, self);
return nil;
}
if (!self.CGImage) {
NSLog (@"*** error: image must be backed by a CGImage: %@", self);
return nil;
}
if (maskImage && !maskImage.CGImage) {
NSLog (@"*** error: maskImage must be backed by a CGImage: %@", maskImage);
return nil;
}
CGRect imageRect = { CGPointZero, self.size };
UIImage *effectImage = self;
BOOL hasBlur = blurRadius > __FLT_EPSILON__;
BOOL hasSaturationChange = fabs(saturationDeltaFactor - 1.) > __FLT_EPSILON__;
if (hasBlur || hasSaturationChange) {
UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
CGContextRef effectInContext = UIGraphicsGetCurrentContext();
CGContextScaleCTM(effectInContext, 1.0, -1.0);
CGContextTranslateCTM(effectInContext, 0, -self.size.height);
CGContextDrawImage(effectInContext, imageRect, self.CGImage);
vImage_Buffer effectInBuffer;
effectInBuffer.data = CGBitmapContextGetData(effectInContext);
effectInBuffer.width = CGBitmapContextGetWidth(effectInContext);
effectInBuffer.height = CGBitmapContextGetHeight(effectInContext);
effectInBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectInContext);
UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
CGContextRef effectOutContext = UIGraphicsGetCurrentContext();
vImage_Buffer effectOutBuffer;
effectOutBuffer.data = CGBitmapContextGetData(effectOutContext);
effectOutBuffer.width = CGBitmapContextGetWidth(effectOutContext);
effectOutBuffer.height = CGBitmapContextGetHeight(effectOutContext);
effectOutBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectOutContext);
if (hasBlur) {
// A description of how to compute the box kernel width from the Gaussian
// radius (aka standard deviation) appears in the SVG spec:
// http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement
//
// For larger values of 's' (s >= 2.0), an approximation can be used: Three
// successive box-blurs build a piece-wise quadratic convolution kernel, which
// approximates the Gaussian kernel to within roughly 3%.
//
// let d = floor(s * 3*sqrt(2*pi)/4 + 0.5)
//
// ... if d is odd, use three box-blurs of size 'd', centered on the output pixel.
//
CGFloat inputRadius = blurRadius * [[UIScreen mainScreen] scale];
unsigned int radius = floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5);
if (radius % 2 != 1) {
radius += 1; // force radius to be odd so that the three box-blur methodology works.
}
vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(&effectOutBuffer, &effectInBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend);
}
BOOL effectImageBuffersAreSwapped = NO;
if (hasSaturationChange) {
CGFloat s = saturationDeltaFactor;
CGFloat floatingPointSaturationMatrix[] = {
0.0722 + 0.9278 * s, 0.0722 - 0.0722 * s, 0.0722 - 0.0722 * s, 0,
0.7152 - 0.7152 * s, 0.7152 + 0.2848 * s, 0.7152 - 0.7152 * s, 0,
0.2126 - 0.2126 * s, 0.2126 - 0.2126 * s, 0.2126 + 0.7873 * s, 0,
0, 0, 0, 1,
};
const int32_t divisor = 256;
NSUInteger matrixSize = sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]);
int16_t saturationMatrix[matrixSize];
for (NSUInteger i = 0; i < matrixSize; ++i) {
saturationMatrix[i] = (int16_t)roundf(floatingPointSaturationMatrix[i] * divisor);
}
if (hasBlur) {
vImageMatrixMultiply_ARGB8888(&effectOutBuffer, &effectInBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags);
effectImageBuffersAreSwapped = YES;
}
else {
vImageMatrixMultiply_ARGB8888(&effectInBuffer, &effectOutBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags);
}
}
if (!effectImageBuffersAreSwapped)
effectImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (effectImageBuffersAreSwapped)
effectImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
// Set up output context.
UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
CGContextRef outputContext = UIGraphicsGetCurrentContext();
CGContextScaleCTM(outputContext, 1.0, -1.0);
CGContextTranslateCTM(outputContext, 0, -self.size.height);
// Draw base image.
CGContextDrawImage(outputContext, imageRect, self.CGImage);
// Draw effect image.
if (hasBlur) {
CGContextSaveGState(outputContext);
if (maskImage) {
CGContextClipToMask(outputContext, imageRect, maskImage.CGImage);
}
CGContextDrawImage(outputContext, imageRect, effectImage.CGImage);
CGContextRestoreGState(outputContext);
}
// Add in color tint.
if (tintColor) {
CGContextSaveGState(outputContext);
CGContextSetFillColorWithColor(outputContext, tintColor.CGColor);
CGContextFillRect(outputContext, imageRect);
CGContextRestoreGState(outputContext);
}
// Output image is ready.
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
@end
@@ -1,54 +0,0 @@
//
// UINavigationController+M13ProgressViewBar.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <UIKit/UIKit.h>
/**A UINavagationController category that adds a progress view to the UINavigationBar.*/
@interface UINavigationController (M13ProgressViewBar)
/**@name Actions*/
/**Show the progress bar.*/
- (void)showProgress;
/**Set the progress to display on the progress bar.
@param progress The progress to display as a percentage from 0-1.
@param animated Wether or not to animate the change.*/
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated;
/**Set the string to replace the UINavigationBar's title with while showing progress. Send nil to reset the title.
@param title The string to replace the UINavigationBar's title while showing progress.*/
- (void)setProgressTitle:(NSString *)title;
/**Set whether or not to show indeterminate.
@param indeterminate wether or not the progress bar is indeterminate.*/
- (void)setIndeterminate:(BOOL)indeterminate;
/**Get whether or not to show indeterminate.*/
- (BOOL)getIndeterminate;
/**Fill the progress bar completely and remove it from display.*/
- (void)finishProgress;
/**Remove the progress bar from the display.*/
- (void)cancelProgress;
/**Wether or not the progress bar is showing.*/
- (BOOL)isShowingProgressBar;
/**
The primary color of the progress bar if you do not want it to be the same as the UINavigationBar's tint color. If set to nil, the UINavigationBar's tint color will be used.
@param primaryColor The color to set.
*/
- (void)setPrimaryColor:(UIColor *)primaryColor;
/**
The secondary color of the progress bar, if nil, the secondary color will be the barTintColor.
@param secondaryColor The color to set.
*/
- (void)setSecondaryColor:(UIColor *)secondaryColor;
@end
@@ -1,478 +0,0 @@
//
// UINavigationController+M13ProgressViewBar.m
// M13ProgressView
//
#import "UINavigationController+M13ProgressViewBar.h"
#import <objc/runtime.h>
//Keys to set properties since one cannot define properties in a category.
static char oldTitleKey;
static char displayLinkKey;
static char animationFromKey;
static char animationToKey;
static char animationStartTimeKey;
static char progressKey;
static char progressViewKey;
static char indeterminateKey;
static char indeterminateLayerKey;
static char isShowingProgressKey;
static char primaryColorKey;
static char secondaryColorKey;
@implementation UINavigationController (M13ProgressViewBar)
#pragma mark Title
- (void)setProgressTitle:(NSString *)title
{
//Change the title on screen.
NSString *oldTitle = [self getOldTitle];
if (oldTitle == nil) {
//We haven't changed the navigation bar yet. So store the original before changing it.
[self setOldTitle:self.visibleViewController.navigationItem.title];
}
if (title != nil) {
self.visibleViewController.navigationItem.title = title;
} else {
self.visibleViewController.navigationItem.title = oldTitle;
[self setOldTitle:nil];
}
}
#pragma mark Progress
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
CADisplayLink *displayLink = [self getDisplayLink];
if (animated == NO) {
if (displayLink) {
//Kill running animations
[displayLink invalidate];
[self setDisplayLink:nil];
}
[self setProgress:progress];
} else {
[self setAnimationStartTime:CACurrentMediaTime()];
[self setAnimationFromValue:[self getProgress]];
[self setAnimationToValue:progress];
if (!displayLink) {
//Create and setup the display link
[displayLink invalidate];
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self setDisplayLink:displayLink];
[displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - [self getAnimationStartTime]) / [self getAnimationDuration];
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[displayLink invalidate];
[self setDisplayLink:nil];
[self setProgress:[self getAnimationToValue]];
return;
}
//Set progress
[self setProgress:[self getAnimationFromValue] + dt * ([self getAnimationToValue] - [self getAnimationFromValue])];
});
}
- (void)finishProgress
{
UIView *progressView = [self getProgressView];
if (progressView) {
dispatch_async(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.1 animations:^{
CGRect progressFrame = progressView.frame;
progressFrame.size.width = self.navigationBar.frame.size.width;
progressView.frame = progressFrame;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.5 animations:^{
progressView.alpha = 0;
} completion:^(BOOL finished) {
[progressView removeFromSuperview];
progressView.alpha = 1;
[self setTitle:nil];
[self setIsShowingProgressBar:NO];
}];
}];
});
}
}
- (void)cancelProgress
{
UIView *progressView = [self getProgressView];
if (progressView) {
dispatch_async(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.5 animations:^{
progressView.alpha = 0;
} completion:^(BOOL finished) {
[progressView removeFromSuperview];
progressView.alpha = 1;
[self setTitle:nil];
[self setIsShowingProgressBar:NO];
}];
});
}
}
#pragma mark Drawing
- (void)showProgress
{
UIView *progressView = [self getProgressView];
[UIView animateWithDuration:.1 animations:^{
progressView.alpha = 1;
}];
[self setIsShowingProgressBar:YES];
}
- (void)updateProgress
{
[self updateProgressWithInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation];
}
- (void)updateProgressWithInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
//Create the progress view if it doesn't exist
UIView *progressView = [self getProgressView];
if(!progressView)
{
progressView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 2.5)];
progressView.backgroundColor = self.navigationBar.tintColor;
if ([self getPrimaryColor]) {
progressView.backgroundColor = [self getPrimaryColor];
}
progressView.clipsToBounds = YES;
[self setProgressView:progressView];
}
//Calculate the frame of the navigation bar, based off the orientation.
UIView *topView = self.topViewController.view;
CGSize screenSize;
if (topView) {
screenSize = topView.bounds.size;
} else {
screenSize = [UIScreen mainScreen].bounds.size;
}
CGFloat width = 0.0;
CGFloat height = 0.0;
//Calculate the width of the screen
if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
//Use the maximum value
width = MAX(screenSize.width, screenSize.height);
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
height = 32.0; //Hate hardcoding values, but autolayout doesn't work, and cant retreive the new height until after the animation completes.
} else {
height = 44.0; //Hate hardcoding values, but autolayout doesn't work, and cant retreive the new height until after the animation completes.
}
} else {
//Use the minimum value
width = MIN(screenSize.width, screenSize.height);
height = 44.0; //Hate hardcoding values, but autolayout doesn't work, and cant retreive the new height until after the animation completes.
}
//Check if the progress view is in its superview and if we are showing the bar.
if (progressView.superview == nil && [self isShowingProgressBar]) {
[self.navigationBar addSubview:progressView];
}
//Layout
if (![self getIndeterminate]) {
//Calculate the width of the progress view;
float progressWidth = width * [self getProgress];
//Set the frame of the progress view
progressView.frame = CGRectMake(0, height - 2.5, progressWidth, 2.5);
} else {
//Calculate the width of the progress view
progressView.frame = CGRectMake(0, height - 2.5, width, 2.5);
}
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self updateProgressWithInterfaceOrientation:toInterfaceOrientation];
[self drawIndeterminateWithInterfaceOrientation:toInterfaceOrientation];
}
- (void)drawIndeterminate
{
[self drawIndeterminateWithInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation];
}
- (void)drawIndeterminateWithInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([self getIndeterminate]) {
//Get the indeterminate layer
CALayer *indeterminateLayer = [self getIndeterminateLayer];
if (!indeterminateLayer) {
//Create if needed
indeterminateLayer = [CALayer layer];
[self setIndeterminateLayer:indeterminateLayer];
}
//Calculate the frame of the navigation bar, based off the orientation.
CGSize screenSize = [UIScreen mainScreen].bounds.size;
CGFloat width = 0.0;
CGFloat height = 0.0;
//Calculate the width of the screen
if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
//Use the maximum value
width = MAX(screenSize.width, screenSize.height);
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
height = 32.0; //Hate hardcoding values, but autolayout doesn't work, and cant retreive the new height until after the animation completes.
} else {
height = 44.0; //Hate hardcoding values, but autolayout doesn't work, and cant retreive the new height until after the animation completes.
}
} else {
//Use the minimum value
width = MIN(screenSize.width, screenSize.height);
height = 44.0; //Hate hardcoding values, but autolayout doesn't work, and cant retreive the new height until after the animation completes.
}
//Create the pattern image
CGFloat stripeWidth = 2.5;
//Start the image context
UIGraphicsBeginImageContextWithOptions(CGSizeMake(stripeWidth * 4.0, stripeWidth * 4.0), NO, [UIScreen mainScreen].scale);
//Fill the background
if ([self getPrimaryColor]) {
[[self getPrimaryColor] setFill];
} else {
[self.navigationBar.tintColor setFill];
}
UIBezierPath *fillPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, stripeWidth * 4.0, stripeWidth * 4.0)];
[fillPath fill];
//Draw the stripes
//Set the stripe color
if ([self getSecondaryColor]) {
[[self getSecondaryColor] setFill];
} else {
CGFloat red;
CGFloat green;
CGFloat blue;
CGFloat alpha;
[self.navigationBar.barTintColor getRed:&red green:&green blue:&blue alpha:&alpha];
//System set the tint color to a close to, but not non-zero value for each component.
if (alpha > .05) {
[self.navigationBar.barTintColor setFill];
} else {
[[UIColor whiteColor] setFill];
}
}
for (int i = 0; i < 4; i++) {
//Create the four inital points of the fill shape
CGPoint bottomLeft = CGPointMake(-(stripeWidth * 4.0), stripeWidth * 4.0);
CGPoint topLeft = CGPointMake(0, 0);
CGPoint topRight = CGPointMake(stripeWidth, 0);
CGPoint bottomRight = CGPointMake(-(stripeWidth * 4.0) + stripeWidth, stripeWidth * 4.0);
//Shift all four points as needed to draw all four stripes
bottomLeft.x += i * (2 * stripeWidth);
topLeft.x += i * (2 * stripeWidth);
topRight.x += i * (2 * stripeWidth);
bottomRight.x += i * (2 * stripeWidth);
//Create the fill path
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:bottomLeft];
[path addLineToPoint:topLeft];
[path addLineToPoint:topRight];
[path addLineToPoint:bottomRight];
[path closePath];
[path fill];
}
//Retreive the image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Set the background of the progress layer
indeterminateLayer.backgroundColor = [UIColor colorWithPatternImage:image].CGColor;
//remove any indeterminate layer animations
[indeterminateLayer removeAllAnimations];
//Set the indeterminate layer frame and add to the sub view
indeterminateLayer.frame = CGRectMake(0, 0, width + (4 * 2.5), 2.5);
UIView *progressView = [self getProgressView];
[progressView.layer addSublayer:indeterminateLayer];
//Add the animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = .1;
animation.repeatCount = HUGE_VALF;
animation.removedOnCompletion = YES;
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(- (2 * 2.5) + (width / 2.0), 2.5 / 2.0)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(0 + (width / 2.0), 2.5 / 2.0)];
[indeterminateLayer addAnimation:animation forKey:@"position"];
} else {
CALayer *indeterminateLayer = [self getIndeterminateLayer];
[indeterminateLayer removeAllAnimations];
[indeterminateLayer removeFromSuperlayer];
}
}
#pragma mark properties
- (void)setOldTitle:(NSString *)oldTitle
{
objc_setAssociatedObject(self, &oldTitleKey, self.visibleViewController.navigationItem.title, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)getOldTitle
{
return objc_getAssociatedObject(self, &oldTitleKey);
}
- (void)setDisplayLink:(CADisplayLink *)displayLink
{
objc_setAssociatedObject(self, &displayLinkKey, displayLink, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (CADisplayLink *)getDisplayLink
{
return objc_getAssociatedObject(self, &displayLinkKey);
}
- (void)setAnimationFromValue:(CGFloat)animationFromValue
{
objc_setAssociatedObject(self, &animationFromKey, [NSNumber numberWithFloat:animationFromValue], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (CGFloat)getAnimationFromValue
{
NSNumber *number = objc_getAssociatedObject(self, &animationFromKey);
return number.floatValue;
}
- (void)setAnimationToValue:(CGFloat)animationToValue
{
objc_setAssociatedObject(self, &animationToKey, [NSNumber numberWithFloat:animationToValue], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (CGFloat)getAnimationToValue
{
NSNumber *number = objc_getAssociatedObject(self, &animationToKey);
return number.floatValue;
}
- (void)setAnimationStartTime:(NSTimeInterval)animationStartTime
{
objc_setAssociatedObject(self, &animationStartTimeKey, [NSNumber numberWithFloat:animationStartTime], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSTimeInterval)getAnimationStartTime
{
NSNumber *number = objc_getAssociatedObject(self, &animationStartTimeKey);
return number.floatValue;
}
- (void)setProgress:(CGFloat)progress
{
if (progress > 1.0) {
progress = 1.0;
} else if (progress < 0.0) {
progress = 0.0;
}
objc_setAssociatedObject(self, &progressKey, [NSNumber numberWithFloat:progress], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
//Draw the update
if ([NSThread isMainThread]) {
[self updateProgress];
} else {
//Sometimes UINavigationController runs in a background thread. And drawing is not thread safe.
dispatch_async(dispatch_get_main_queue(), ^{
[self updateProgress];
});
}
}
- (void)setIsShowingProgressBar:(BOOL)isShowingProgressBar
{
objc_setAssociatedObject(self, &isShowingProgressKey, [NSNumber numberWithBool:isShowingProgressBar], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (CGFloat)getProgress
{
NSNumber *number = objc_getAssociatedObject(self, &progressKey);
return number.floatValue;
}
- (CGFloat)getAnimationDuration
{
return .3;
}
- (void)setProgressView:(UIView *)view
{
objc_setAssociatedObject(self, &progressViewKey, view, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (UIView *)getProgressView
{
return objc_getAssociatedObject(self, &progressViewKey);
}
- (void)setIndeterminate:(BOOL)indeterminate
{
objc_setAssociatedObject(self, &indeterminateKey, [NSNumber numberWithBool:indeterminate], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self updateProgress];
[self drawIndeterminate];
}
- (BOOL)getIndeterminate
{
NSNumber *number = objc_getAssociatedObject(self, &indeterminateKey);
return number.boolValue;
}
- (void)setIndeterminateLayer:(CALayer *)indeterminateLayer
{
objc_setAssociatedObject(self, &indeterminateLayerKey, indeterminateLayer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (CALayer *)getIndeterminateLayer
{
return objc_getAssociatedObject(self, &indeterminateLayerKey);
}
- (BOOL)isShowingProgressBar
{
return [objc_getAssociatedObject(self, &isShowingProgressKey) boolValue];
}
- (void)setPrimaryColor:(UIColor *)primaryColor
{
objc_setAssociatedObject(self, &primaryColorKey, primaryColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self getProgressView].backgroundColor = primaryColor;
[self setIndeterminate:[self getIndeterminate]];
}
- (UIColor *)getPrimaryColor
{
return objc_getAssociatedObject(self, &primaryColorKey);
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
objc_setAssociatedObject(self, &secondaryColorKey, secondaryColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self setIndeterminate:[self getIndeterminate]];
}
- (UIColor *)getSecondaryColor
{
return objc_getAssociatedObject(self, &secondaryColorKey);
}
@end
@@ -0,0 +1,266 @@
//
// M13BorderedProgressBar.swift
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 9/13/15.
// Copyright © 2015 Brandon McQuilkin. All rights reserved.
//
import UIKit
/**
A wrapper around M13ProgressBar that adds a border around the bar.
*/
@IBDesignable
public class M13BorderedProgressBar: M13ProgressView {
//-------------------------------
// MARK: Appearance
//-------------------------------
/**
The corner radius of the progress bar.
*/
@IBInspectable public var cornerRadius: CGFloat = CGFloat.max {
didSet {
progressBar.cornerRadius = cornerRadius
setNeedsLayout()
}
}
/**
The width of the border around the progress bar.
*/
@IBInspectable public var borderWidth: CGFloat = 1.0 {
didSet {
borderView.layer.borderWidth = borderWidth
}
}
/**
The spacing between the border and the progress bar.
*/
@IBInspectable public var borderPadding: CGFloat = 1.0
override public var secondaryColor: UIColor {
didSet {
progressBar.secondaryColor = secondaryColor
}
}
override public var successColor: UIColor {
didSet {
progressBar.successColor = successColor
if state == M13ProgressViewState.Success {
borderView.layer.borderColor = successColor.CGColor
}
}
}
override public var failureColor: UIColor {
didSet {
progressBar.failureColor = failureColor
if state == M13ProgressViewState.Failure {
borderView.layer.borderColor = failureColor.CGColor
}
}
}
//-------------------------------
// MARK: Properties
//-------------------------------
/**
The progress bar that displays the progress.
*/
public var progressBar: M13ProgressBar = M13ProgressBar() {
willSet(newValue) {
// Remove the current progress bar from the view.
progressBar.removeFromSuperview()
}
didSet(oldValue) {
// Set the current parameters
progressBar.cornerRadius = cornerRadius
progressBar.secondaryColor = secondaryColor
progressBar.successColor = successColor
progressBar.failureColor = failureColor
progressBar.progressDirection = progressDirection
progressBar.indeterminate = indeterminate
// Add the new progress bar to the view.
addSubview(progressBar)
}
}
/**
The view that displays the border layer.
*/
private var borderView: UIView = UIView()
/**
The direction the progress bar travels in as the progress nears completion.
*/
@IBInspectable public var progressDirection: M13ProgressBarProgressDirection = M13ProgressBarProgressDirection.LeadingToTrailing {
didSet {
progressBar.progressDirection = progressDirection
}
}
override public var indeterminate: Bool {
didSet {
progressBar.indeterminate = indeterminate
}
}
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("borderWidth") {
borderWidth = CGFloat(aDecoder.decodeDoubleForKey("borderWidth"))
}
if aDecoder.containsValueForKey("borderPadding") {
borderWidth = CGFloat(aDecoder.decodeDoubleForKey("borderPadding"))
}
if aDecoder.containsValueForKey("progressBar") {
progressBar = aDecoder.decodeObjectOfClass(M13ProgressBar.self, forKey: "progressBar")!
}
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
private func sharedSetup() {
// Set the defaults.
//self.clipsToBounds = true
// Set border
borderView.clipsToBounds = true
borderView.layer.borderColor = tintColor.CGColor
borderView.layer.borderWidth = borderWidth
borderView.backgroundColor = UIColor.clearColor()
// Set background
secondaryColor = UIColor.clearColor()
// Add views
addSubview(progressBar)
addSubview(borderView)
// Set the progress and indeterminate animations.
weak var weakSelf: M13BorderedProgressBar? = self;
progressUpdate = {() -> Void in
if let weakSelf = weakSelf {
weakSelf.progressBar.setProgress(weakSelf.progress, animated: false)
}
}
indeterminateUpdate = {(frameDuration: CFTimeInterval) -> Void in
weakSelf?.progressBar.indeterminateUpdate?(frameDuration: frameDuration)
}
setNeedsLayout()
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeDouble(Double(borderWidth), forKey: "borderWidth")
aCoder.encodeDouble(Double(borderPadding), forKey: "borderPadding")
aCoder.encodeObject(progressBar, forKey: "progressBar")
}
public override func prepareForInterfaceBuilder() {
sharedSetup()
super.prepareForInterfaceBuilder()
}
//-------------------------------
// MARK: Layout
//-------------------------------
public override func intrinsicContentSize() -> CGSize {
return CGSizeMake((borderWidth * 2) + (borderPadding * 2), (borderWidth * 2) + (borderPadding * 2))
}
public override func layoutSubviews() {
super.layoutSubviews()
// Update the corner radius
var appropiateCornerRadius: CGFloat = frame.size.width < frame.size.height ? frame.size.width / 2.0 : frame.size.height / 2.0
appropiateCornerRadius = appropiateCornerRadius > cornerRadius ? cornerRadius : appropiateCornerRadius
borderView.layer.cornerRadius = appropiateCornerRadius
// Layout
borderView.frame = CGRectMake(0.0, 0.0, frame.size.width, frame.size.height)
progressBar.frame = CGRectMake(borderWidth + borderPadding, borderWidth + borderPadding, frame.size.width - (2 * (borderWidth + borderPadding)), frame.size.height - (2 * (borderWidth + borderPadding)))
// Update progress
progressUpdate?()
}
//-------------------------------
// MARK: Actions
//-------------------------------
public override func setState(state: M13ProgressViewState, animated: Bool) {
super.setState(state, animated: animated)
if !animated {
switch state {
case .Normal:
borderView.layer.borderColor = tintColor.CGColor
progressBar.setState(state, animated: false)
break
case .Success:
borderView.layer.borderColor = successColor.CGColor
progressBar.setState(state, animated: false)
break
case .Failure:
borderView.layer.borderColor = failureColor.CGColor
progressBar.setState(state, animated: false)
break
}
} else {
let colorAnimation: CABasicAnimation = CABasicAnimation(keyPath: "borderColor")
colorAnimation.fromValue = borderView.layer.borderColor!
colorAnimation.fillMode = kCAFillModeForwards
colorAnimation.removedOnCompletion = false
colorAnimation.duration = animationDuration
var toColor: UIColor = tintColor
switch state {
case .Normal:
toColor = tintColor
break
case .Success:
toColor = successColor
break
case .Failure:
toColor = failureColor
break
}
colorAnimation.toValue = toColor.CGColor
borderView.layer.addAnimation(colorAnimation, forKey: "borderColor")
progressBar.setState(state, animated: true)
borderView.layer.borderColor = toColor.CGColor
}
}
//-------------------------------
// MARK: Other
//-------------------------------
public override func tintColorDidChange() {
super.tintColorDidChange()
borderView.layer.borderColor = tintColor.CGColor
}
}
+376
View File
@@ -0,0 +1,376 @@
//
// M13ProgressBar.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
The possible directions a progress bar can travel in.
- LeadingToTrailing: The progress bar will travel from leading to trailing as the progress nears completion.
- TrailingToLeading: The progress bar will travel from trailing to leading as the progress nears completion.
- BottomToTop: The progress bar will travel from the bottom to the top as the progress nears completion.
- TopToBottom: The progress bar will travel from the top to the bottom as the progress nears completion.
*/
public enum M13ProgressBarProgressDirection: Int, RawRepresentable {
/// The progress bar will travel from leading to trailing as the progress nears completion.
case LeadingToTrailing
/// The progress bar will travel from trailing to leading as the progress nears completion.
case TrailingToLeading
/// The progress bar will travel from the bottom to the top as the progress nears completion.
case BottomToTop
/// The progress bar will travel from the top to the bottom as the progress nears completion.
case TopToBottom
}
/**
A simple progress bar similar to UIProgressBar, but with an indeterminate state.
*/
@IBDesignable
public class M13ProgressBar: M13ProgressView {
//-------------------------------
// MARK: Appearance
//-------------------------------
/**
The corner radius of the progress bar.
*/
@IBInspectable public var cornerRadius: CGFloat = CGFloat.max {
didSet {
var appropiateCornerRadius: CGFloat = frame.size.width < frame.size.height ? frame.size.width / 2.0 : frame.size.height / 2.0
appropiateCornerRadius = appropiateCornerRadius > cornerRadius ? cornerRadius : appropiateCornerRadius
layer.cornerRadius = appropiateCornerRadius
progressLayer.cornerRadius = appropiateCornerRadius
indeterminateLayer.cornerRadius = appropiateCornerRadius
}
}
/**
The secondary color of the progress view.
*/
override public var secondaryColor: UIColor {
didSet {
layer.backgroundColor = secondaryColor.CGColor
}
}
/**
The primary color when the progress view is in the success state.
*/
override public var successColor: UIColor {
didSet {
if state == M13ProgressViewState.Success {
progressLayer.backgroundColor = successColor.CGColor
indeterminateLayer.backgroundColor = successColor.CGColor
}
}
}
/**
The primary color when the progress view is in the failure state.
*/
override public var failureColor: UIColor {
didSet {
if state == M13ProgressViewState.Failure {
progressLayer.backgroundColor = failureColor.CGColor
indeterminateLayer.backgroundColor = failureColor.CGColor
}
}
}
//-------------------------------
// MARK: Properties
//-------------------------------
/**
The direction the progress bar travels in as the progress nears completion.
*/
@IBInspectable public var progressDirection: M13ProgressBarProgressDirection = M13ProgressBarProgressDirection.LeadingToTrailing {
didSet {
progressUpdate?()
}
}
/**
The layer that makes up the progress bar.
*/
internal var progressLayer: CALayer = CALayer()
/**
The layer that makes up the indeterminate progress bar.
*/
internal var indeterminateLayer: CAShapeLayer = CAShapeLayer()
override public var indeterminate: Bool {
didSet {
// Add the indeterminate layer.
if indeterminate && indeterminateLayer.superlayer == nil {
progressLayer.removeFromSuperlayer()
layer.addSublayer(indeterminateLayer)
}
// Add the progress layer
if !indeterminate && progressLayer.superlayer == nil {
indeterminateLayer.removeFromSuperlayer()
layer.addSublayer(progressLayer)
}
}
}
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("cornerRadius") {
cornerRadius = CGFloat(aDecoder.decodeDoubleForKey("cornerRadius"))
}
if aDecoder.containsValueForKey("progressDirection") {
if let direction = M13ProgressBarProgressDirection(rawValue: aDecoder.decodeIntegerForKey("progressDirection")) {
progressDirection = direction
}
}
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
private func sharedSetup() {
// Set the defaults.
self.clipsToBounds = true
layer.cornerRadius = cornerRadius
layer.backgroundColor = secondaryColor.CGColor
progressLayer.cornerRadius = cornerRadius
indeterminateLayer.cornerRadius = cornerRadius
progressLayer.backgroundColor = tintColor.CGColor
indeterminateLayer.backgroundColor = tintColor.CGColor
// Disable default animations
progressLayer.actions = [
"frame": NSNull(),
"anchorPoint": NSNull(),
"bounds": NSNull(),
"position": NSNull(),
"cornerRadius": NSNull()
]
indeterminateLayer.actions = [
"frame": NSNull(),
"anchorPoint": NSNull(),
"bounds": NSNull(),
"position": NSNull(),
"cornerRadius": NSNull()
]
// Add the layers
self.layer.addSublayer(progressLayer)
// Set the progress and indeterminate animations.
weak var weakSelf: M13ProgressBar? = self;
progressUpdate = {() -> Void in
if let weakSelf = weakSelf {
// Get the frame of the progress layer
var progressFrame: CGRect = CGRectZero
switch weakSelf.progressDirection {
case .LeadingToTrailing:
let xPosition = UIView.userInterfaceLayoutDirectionForSemanticContentAttribute(UISemanticContentAttribute.Spatial) == UIUserInterfaceLayoutDirection.LeftToRight ? 0.0 : weakSelf.frame.size.width - (weakSelf.frame.size.width * weakSelf.progress)
progressFrame = CGRectMake(xPosition, 0.0, weakSelf.frame.size.width * weakSelf.progress, weakSelf.frame.size.height)
break
case .TrailingToLeading:
let xPosition = UIView.userInterfaceLayoutDirectionForSemanticContentAttribute(UISemanticContentAttribute.Spatial) == UIUserInterfaceLayoutDirection.RightToLeft ? 0.0 : weakSelf.frame.size.width - (weakSelf.frame.size.width * weakSelf.progress)
progressFrame = CGRectMake(xPosition, 0.0, weakSelf.frame.size.width * weakSelf.progress, weakSelf.frame.size.height)
break
case .BottomToTop:
progressFrame = CGRectMake(0.0, weakSelf.frame.size.height - (weakSelf.frame.size.height * weakSelf.progress), weakSelf.frame.size.width, weakSelf.frame.size.height * weakSelf.progress)
break
case .TopToBottom:
progressFrame = CGRectMake(0.0, 0.0, weakSelf.frame.size.width, weakSelf.frame.size.height * weakSelf.progress)
break
}
weakSelf.progressLayer.frame = progressFrame
}
}
indeterminateUpdate = {(frameDuration: CFTimeInterval) -> Void in
if let weakSelf = weakSelf {
let horizontallyTraveling: Bool = weakSelf.progressDirection == M13ProgressBarProgressDirection.LeadingToTrailing || weakSelf.progressDirection == M13ProgressBarProgressDirection.TrailingToLeading
let barPosition: CGFloat = horizontallyTraveling ? weakSelf.indeterminateLayer.frame.origin.x : weakSelf.indeterminateLayer.frame.origin.y
let barLength: CGFloat = horizontallyTraveling ? weakSelf.frame.size.width * 0.2 : weakSelf.frame.size.height * 0.2
let totalTravelDistance: CGFloat = horizontallyTraveling ? weakSelf.frame.size.width + (2.0 * barLength) : weakSelf.frame.size.height + (2.0 * barLength)
let totalAnimationFrames: CGFloat = CGFloat(weakSelf.indeterminateAnimationDuration) / CGFloat(frameDuration)
let travelDelta: CGFloat = totalTravelDistance / totalAnimationFrames
// Set the new frame of the bar: either move it by the travel delta, or move it back to the begining.
switch weakSelf.progressDirection {
case .LeadingToTrailing:
let leftToRight: Bool = UIView.userInterfaceLayoutDirectionForSemanticContentAttribute(UISemanticContentAttribute.Spatial) == UIUserInterfaceLayoutDirection.LeftToRight
if leftToRight {
if barPosition >= weakSelf.frame.size.width {
weakSelf.indeterminateLayer.frame = CGRectMake(-barLength, 0.0, barLength, weakSelf.frame.size.height)
} else {
weakSelf.indeterminateLayer.frame = CGRectMake(weakSelf.indeterminateLayer.frame.origin.x + travelDelta, 0.0, barLength, weakSelf.frame.size.height)
}
} else {
if barPosition <= -barLength {
weakSelf.indeterminateLayer.frame = CGRectMake(weakSelf.frame.size.width, 0.0, barLength, weakSelf.frame.size.height)
} else {
weakSelf.indeterminateLayer.frame = CGRectMake(weakSelf.indeterminateLayer.frame.origin.x - travelDelta, 0.0, barLength, weakSelf.frame.size.height)
}
}
break
case .TrailingToLeading:
var rightToLeft: Bool = UIView.userInterfaceLayoutDirectionForSemanticContentAttribute(UISemanticContentAttribute.Spatial) == UIUserInterfaceLayoutDirection.RightToLeft
if rightToLeft {
if barPosition <= -barLength {
weakSelf.indeterminateLayer.frame = CGRectMake(weakSelf.frame.size.width, 0.0, barLength, weakSelf.frame.size.height)
} else {
weakSelf.indeterminateLayer.frame = CGRectMake(weakSelf.indeterminateLayer.frame.origin.x - travelDelta, 0.0, barLength, weakSelf.frame.size.height)
}
} else {
if barPosition >= weakSelf.frame.size.width {
weakSelf.indeterminateLayer.frame = CGRectMake(-barLength, 0.0, barLength, weakSelf.frame.size.height)
} else {
weakSelf.indeterminateLayer.frame = CGRectMake(weakSelf.indeterminateLayer.frame.origin.x + travelDelta, 0.0, barLength, weakSelf.frame.size.height)
}
}
break
case .BottomToTop:
if barPosition <= -barLength {
weakSelf.indeterminateLayer.frame = CGRectMake(0.0, weakSelf.frame.size.height, weakSelf.frame.size.width, barLength)
} else {
weakSelf.indeterminateLayer.frame = CGRectMake(0.0, weakSelf.indeterminateLayer.frame.origin.y - travelDelta, weakSelf.frame.size.width, barLength)
}
break
case .TopToBottom:
if barPosition >= weakSelf.frame.size.height {
weakSelf.indeterminateLayer.frame = CGRectMake(0.0, -barLength, weakSelf.frame.size.width, barLength)
} else {
weakSelf.indeterminateLayer.frame = CGRectMake(0.0, weakSelf.indeterminateLayer.frame.origin.y + travelDelta, weakSelf.frame.size.width, barLength)
}
break
}
}
}
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeDouble(Double(cornerRadius), forKey: "cornerRadius")
aCoder.encodeInteger(progressDirection.rawValue, forKey: "progressDirection")
}
public override func prepareForInterfaceBuilder() {
sharedSetup()
super.prepareForInterfaceBuilder()
}
//-------------------------------
// MARK: Actions
//-------------------------------
public override func setState(state: M13ProgressViewState, animated: Bool) {
super.setState(state, animated: animated)
if !animated {
switch state {
case .Normal:
progressLayer.backgroundColor = tintColor.CGColor
indeterminateLayer.backgroundColor = tintColor.CGColor
break
case .Success:
progressLayer.backgroundColor = successColor.CGColor
indeterminateLayer.backgroundColor = successColor.CGColor
break
case .Failure:
progressLayer.backgroundColor = failureColor.CGColor
indeterminateLayer.backgroundColor = failureColor.CGColor
break
}
} else {
let colorAnimation: CABasicAnimation = CABasicAnimation(keyPath: "backgroundColor")
colorAnimation.fromValue = progressLayer.backgroundColor!
colorAnimation.fillMode = kCAFillModeForwards
colorAnimation.removedOnCompletion = false
colorAnimation.duration = animationDuration
var toColor: UIColor = tintColor
switch state {
case .Normal:
toColor = tintColor
break
case .Success:
toColor = successColor
break
case .Failure:
toColor = failureColor
break
}
colorAnimation.toValue = toColor.CGColor
progressLayer.addAnimation(colorAnimation, forKey: "backgroundColor")
indeterminateLayer.addAnimation(colorAnimation, forKey: "backgroundColor")
progressLayer.backgroundColor = toColor.CGColor
indeterminateLayer.backgroundColor = toColor.CGColor
}
}
//-------------------------------
// MARK: Layout
//-------------------------------
public override func intrinsicContentSize() -> CGSize {
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric)
}
public override func layoutSubviews() {
super.layoutSubviews()
//Update the corner radius
var appropiateCornerRadius: CGFloat = frame.size.width < frame.size.height ? frame.size.width / 2.0 : frame.size.height / 2.0
appropiateCornerRadius = appropiateCornerRadius > cornerRadius ? cornerRadius : appropiateCornerRadius
layer.cornerRadius = appropiateCornerRadius
progressLayer.cornerRadius = appropiateCornerRadius
indeterminateLayer.cornerRadius = appropiateCornerRadius
//Update progress frame
progressUpdate?()
}
//-------------------------------
// MARK: Other
//-------------------------------
public override func tintColorDidChange() {
super.tintColorDidChange()
progressLayer.backgroundColor = tintColor.CGColor
indeterminateLayer.backgroundColor = tintColor.CGColor
}
}
@@ -0,0 +1,379 @@
//
// M13ProgressCircular.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
The possible directions a circular progress indicator can travel in.
- Clockwise: The progress ring will travel clockwise as the progress nears completion.
- CounterClockwise: The progress ring will travel counter-clockwise as the progress nears completion.
*/
public enum M13ProgressCircularProgressDirection: Int, RawRepresentable {
/// The progress ring will travel clockwise as the progress nears completion.
case Clockwise
/// The progress ring will travel counter-clockwise as the progress nears completion.
case CounterClockwise
}
/**
Base class for circular progress views.
Ring and Pie progress views are derived from this class. Do not instantiate directly.
*/
@IBDesignable
public class M13ProgressCircular: M13ProgressView {
//-------------------------------
// MARK: Properties
//-------------------------------
/**
The direction the progress bar travels in as the progress nears completion.
*/
@IBInspectable public var progressDirection: M13ProgressCircularProgressDirection = .Clockwise {
didSet {
progressUpdate?()
}
}
@IBInspectable public var backgroundRingWidth :Int = 0 {
didSet {
setNeedsLayout()
progressUpdate?()
}
}
//-------------------------------
// MARK: Property Overrides
//-------------------------------
/**
The secondary color of the progress view.
*/
override public var secondaryColor: UIColor {
didSet {
indeterminateLayer.strokeColor = secondaryColor.CGColor
}
}
/**
The primary color when the progress view is in the success state.
*/
override public var successColor: UIColor {
didSet {
if state == .Success {
iconLayer.fillColor = successColor.CGColor
}
}
}
/**
The primary color when the progress view is in the failure state.
*/
override public var failureColor: UIColor {
didSet {
if state == .Failure {
iconLayer.fillColor = failureColor.CGColor
}
}
}
//-------------------------------
// MARK: Layers
//-------------------------------
/**
The layer that makes up the progress ring.
*/
internal var progressLayer: CAShapeLayer = CAShapeLayer()
/**
The layer that makes up the indeterminate ring, and the background for the progress ring.
*/
internal var indeterminateLayer: CAShapeLayer = CAShapeLayer()
/**
The layer that is used to render icons for success or failure.
*/
internal var iconLayer: CAShapeLayer = CAShapeLayer()
//-------------------------------
// MARK: Protected Variables
//-------------------------------
/** The starting angle for drawing the indeterminate animation ring. */
internal var indeterminateAnimationAngle :CGFloat = 0
/** Ring widths after validation and bounds adjustments */
internal var adjustedBackgroundRingWidth :CGFloat = 0
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("progressDirection") {
if let direction = M13ProgressCircularProgressDirection(rawValue: aDecoder.decodeIntegerForKey("progressDirection")) {
progressDirection = direction
}
}
if aDecoder.containsValueForKey("backgroundRingWidth") {
backgroundRingWidth = aDecoder.decodeIntegerForKey("backgroundRingWidth")
}
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
internal func sharedSetup() {
// Set the defaults.
self.clipsToBounds = false
layer.backgroundColor = UIColor.clearColor().CGColor
// Set up the indeterminate layer
indeterminateLayer = CAShapeLayer()
indeterminateLayer.backgroundColor = UIColor.clearColor().CGColor
indeterminateLayer.strokeColor = secondaryColor.CGColor
indeterminateLayer.fillColor = nil
indeterminateLayer.lineCap = kCALineCapRound
// Set up the progress layer
progressLayer = CAShapeLayer()
progressLayer.backgroundColor = UIColor.clearColor().CGColor
progressLayer.strokeColor = nil
progressLayer.fillColor = tintColor.CGColor
progressLayer.lineCap = kCALineCapButt
adjustBackgroundRingWidth()
// Set up the icon layer
iconLayer = CAShapeLayer()
iconLayer.backgroundColor = UIColor.clearColor().CGColor
iconLayer.strokeColor = nil
iconLayer.fillColor = nil
iconLayer.lineCap = kCALineCapButt
// Disable default animations
progressLayer.actions = [
"frame": NSNull(),
"anchorPoint": NSNull(),
"bounds": NSNull(),
"position": NSNull(),
]
indeterminateLayer.actions = [
"frame": NSNull(),
"anchorPoint": NSNull(),
"bounds": NSNull(),
"position": NSNull(),
]
iconLayer.actions = [
"frame": NSNull(),
"anchorPoint": NSNull(),
"bounds": NSNull(),
"position": NSNull(),
]
// Add the layers
layer.addSublayer(indeterminateLayer)
layer.addSublayer(progressLayer)
layer.addSublayer(iconLayer)
// Be sure to implement progressUpdate() and indeterminateUpdate in child classes.
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(progressDirection.rawValue, forKey: "progressDirection")
aCoder.encodeInteger(backgroundRingWidth, forKey: "backgroundRingWidth")
super.encodeWithCoder(aCoder)
}
public override func prepareForInterfaceBuilder() {
sharedSetup()
super.prepareForInterfaceBuilder()
}
//-------------------------------
// MARK: Actions
//-------------------------------
public override func setState(state: M13ProgressViewState, animated: Bool) {
super.setState(state, animated: animated)
switch state {
case .Normal:
hideIcon()
break
case .Success:
drawSuccess()
break
case .Failure:
drawFailure()
break
}
setNeedsLayout()
progressUpdate?()
}
//-------------------------------
// MARK: Layout
//-------------------------------
public override func intrinsicContentSize() -> CGSize {
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric)
}
public override func layoutSubviews() {
super.layoutSubviews()
adjustBackgroundRingWidth()
// Update progress frame
progressUpdate?()
}
public func adjustBackgroundRingWidth()
{
if backgroundRingWidth > 0 {
adjustedBackgroundRingWidth = CGFloat(backgroundRingWidth)
} else {
adjustedBackgroundRingWidth = max(self.bounds.size.width * 0.025, 1.0)
}
indeterminateLayer.lineWidth = adjustedBackgroundRingWidth
}
//-------------------------------
// MARK: Draw Functions
//-------------------------------
public func maxRadius() -> CGFloat
{
return min(self.bounds.size.width, self.bounds.size.height) / 2.0
}
public func centerOfCircle() -> CGPoint
{
return CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.height / 2.0)
}
public func createPieSlicePath(center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) -> UIBezierPath {
let path = UIBezierPath()
path.moveToPoint(center)
path.addLineToPoint(CGPointMake(center.x + radius * cos(startAngle), center.y + radius * sin(startAngle)))
path.addArcWithCenter(center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise)
path.closePath()
return path
}
public func drawBackground()
{
// Draw a circle
let center = centerOfCircle()
let radius = maxRadius() - adjustedBackgroundRingWidth / 2.0
let path = UIBezierPath()
path.addArcWithCenter(center, radius: radius, startAngle: 0, endAngle: 2.0 * CGFloat(M_PI), clockwise: true)
indeterminateLayer.path = path.CGPath
}
public func drawSuccess()
{
// Draw relative to a base size and percentage, that way the check can be drawn for any size.
let radius = maxRadius()
let size = radius * 0.3
// Create the path for the Checkmark
let path = UIBezierPath()
path.moveToPoint(CGPointMake(0, 0))
path.addLineToPoint(CGPointMake(0, size * 2))
path.addLineToPoint(CGPointMake(size * 3, size * 2))
path.addLineToPoint(CGPointMake(size * 3, size))
path.addLineToPoint(CGPointMake(size, size))
path.addLineToPoint(CGPointMake(size, 0))
path.closePath()
// Rotate it through -45 degrees...
path.applyTransform(CGAffineTransformMakeRotation(CGFloat(-M_PI_4)))
// Center it
path.applyTransform(CGAffineTransformMakeTranslation(radius * 0.46, radius * 1.02))
// Set path and fill color
iconLayer.path = path.CGPath
iconLayer.fillColor = successColor.CGColor
}
public func drawFailure()
{
// Calculate the size of the X
let radius = maxRadius()
let size = radius * 0.3
// Create the path for the X
let path = UIBezierPath()
path.moveToPoint(CGPointMake(size, 0))
path.addLineToPoint(CGPointMake(2 * size, 0))
path.addLineToPoint(CGPointMake(2 * size, size))
path.addLineToPoint(CGPointMake(3 * size, size))
path.addLineToPoint(CGPointMake(3 * size, 2 * size))
path.addLineToPoint(CGPointMake(2 * size, 2 * size))
path.addLineToPoint(CGPointMake(2 * size, 3 * size))
path.addLineToPoint(CGPointMake(size, 3 * size))
path.addLineToPoint(CGPointMake(size, 2 * size))
path.addLineToPoint(CGPointMake(0, 2 * size))
path.addLineToPoint(CGPointMake(0, size))
path.addLineToPoint(CGPointMake(size, size))
path.closePath()
// Center it
path.applyTransform(CGAffineTransformMakeTranslation(radius - (1.5 * size), radius - (1.5 * size)))
// Rotate path
let a = CGFloat(cos(M_PI_4))
let b = CGFloat(sin(M_PI_4))
let c = CGFloat(-sin(M_PI_4))
let d = CGFloat(cos(M_PI_4))
let tx = radius * CGFloat(1 - cos(M_PI_4) + sin(M_PI_4))
let ty = radius * CGFloat(1 - sin(M_PI_4) - cos(M_PI_4))
path.applyTransform(CGAffineTransformMake(a, b, c, d, tx, ty))
// Set path and fill color
iconLayer.path = path.CGPath
iconLayer.fillColor = failureColor.CGColor
}
public func hideIcon()
{
iconLayer.path = nil
}
//-------------------------------
// MARK: Other
//-------------------------------
public override func tintColorDidChange() {
super.tintColorDidChange()
progressLayer.fillColor = tintColor.CGColor
progressLayer.strokeColor = nil
}
}
@@ -0,0 +1,302 @@
//
// M13ProgressFilteredImage.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
The possible filters that can be applied to a progress image.
- Blur: The image goes from blurry to in-focus as progress nears completion.
- LightTunnel:
- SepiaTone: The image goes from Sepia Tone to full-color as progress nears completion.
*/
public enum M13ProgressImageProgressFilter: Int, RawRepresentable {
///
case Blur
///
case LightTunnel
///
case SepiaTone
}
/**
A progress view where progress is shown by changes in CIFilters.
@note This progress bar does not have in indeterminate mode and does not respond to actions.
*/
@IBDesignable
public class M13ProgressFilteredImage: M13ProgressView {
//-------------------------------
// MARK: Properties
//-------------------------------
/**
The direction the progress bar travels in as the progress nears completion. (What direction the fill proceeds in.)
*/
@IBInspectable public var progressFilter: M13ProgressImageProgressFilter = .Blur {
didSet {
switch (progressFilter) {
case .Blur:
setBlurFilter()
case .LightTunnel:
setLightTunnelFilter()
case .SepiaTone:
setSepiaToneFilter()
}
progressUpdate?()
}
}
/**
The image to use when showing progress.
*/
@IBInspectable public var progressImage: UIImage! {
didSet {
progressUpdate?()
}
}
//-------------------------------
// MARK: Filter Variables
//-------------------------------
/**
The array of CIFilters to apply to the image.
*/
public var filters :[AnyObject] = []
/**
The dictionaries of dictionaries that correspond to filter properties to be changed.
NSArray
|------ NSDictionary (Index matches the coresponding CIFilter in filters)
| |---- "Parameter Key" -> NSDictionary
| | |------ "Start Value" -> NSNumber
| | |------ "End Value" -> NSNumber
| |---- "Parameter Key" -> NSDictionary
| |------ "Start Value" -> NSNumber
| |------ "End Value" -> NSNumber
|------ NSDictionary ...
*/
public var filterParameters :[ [String:AnyObject] ] = []
/**
Keys for the filterParameters dictionary.
*/
public let FilterStartValuesKey = "StartValues"
public let FilterEndValuesKey = "EndValues"
//-------------------------------
// MARK: Protected Variables
//-------------------------------
/**
The UIImageView that shows the progress image.
*/
internal var progressView: UIImageView!
/**
Link to the display to keep animations in sync.
*/
internal var displayLink: CADisplayLink!
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("progressFilter") {
if let filter = M13ProgressImageProgressFilter(rawValue: aDecoder.decodeIntegerForKey("progressFilter")) {
progressFilter = filter
}
}
if aDecoder.containsValueForKey("progressImage") {
if let img = aDecoder.decodeObjectForKey("progressImage") as? UIImage {
progressImage = img
}
}
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
internal func sharedSetup() {
// Set the defaults
self.clipsToBounds = false
layer.backgroundColor = UIColor.clearColor().CGColor
// Set the progress image view
progressView = UIImageView(frame: self.bounds)
progressView.contentMode = .ScaleAspectFit
addSubview(progressView)
// Layout
layoutSubviews()
// Set the progress animation.
weak var weakSelf: M13ProgressFilteredImage? = self
progressUpdate = {() -> Void in
if let retainedSelf = weakSelf {
retainedSelf.progressView.image = retainedSelf.createImageForCurrentProgress()
}
}
// There is no indeterminate animation.
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(progressFilter.rawValue, forKey: "progressFilter")
aCoder.encodeObject(progressImage)
super.encodeWithCoder(aCoder)
}
public override func prepareForInterfaceBuilder() {
sharedSetup()
super.prepareForInterfaceBuilder()
}
//-------------------------------
// MARK: Filters
//-------------------------------
internal func setBlurFilter()
{
guard let blurFilter = CIFilter(name: "CIGaussianBlur") else {
return
}
blurFilter.setDefaults()
filters = [ blurFilter ]
filterParameters = [
[
"inputRadius" : [
FilterStartValuesKey : CGFloat(100.0),
FilterEndValuesKey : CGFloat(0.0)
]
]
]
}
internal func setSepiaToneFilter()
{
guard let sepiaFilter = CIFilter(name: "CISepiaTone") else {
return
}
sepiaFilter.setDefaults()
// Set filter intensity
sepiaFilter.setValue(1.0, forKey: kCIInputIntensityKey)
filters = [ sepiaFilter ]
filterParameters = [
[
kCIInputIntensityKey : [
FilterStartValuesKey : CGFloat(1.0),
FilterEndValuesKey : CGFloat(0.0)
]
]
]
}
internal func setLightTunnelFilter()
{
if false { "TODO: CILightTunnel filter does not work yet" }
guard let lightTunnelFilter = CIFilter(name: "CILightTunnel") else {
return
}
lightTunnelFilter.setDefaults()
// Get center
let center = CIVector(CGPoint: CGPointMake(progressImage.size.width / 2.0, progressImage.size.height / 2.0))
lightTunnelFilter.setValue(center, forKey: "inputCenter")
filters = [ lightTunnelFilter ]
filterParameters = [
[
"inputRotation" : [
FilterStartValuesKey : CGFloat(10.0),
FilterEndValuesKey : CGFloat(0.0)
],
"inputRadius" : [
FilterStartValuesKey : CGFloat(20.0),
FilterEndValuesKey : CGFloat(0.0)
]
]
]
}
//-------------------------------
// MARK: Layout
//-------------------------------
public override func intrinsicContentSize() -> CGSize {
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric)
}
//-------------------------------
// MARK: Draw Functions
//-------------------------------
public func createImageForCurrentProgress() -> UIImage? {
guard let cgimage = progressImage.CGImage else {
return nil
}
// Create the base CIImage
var ciimage = CIImage(CGImage: cgimage)
// Change the values of the CIFilters before drawing
for (var i = 0; i < filters.count; ++i) {
let filter = filters[i]
// For each filter
let parameters = filterParameters[i]
// For each parameter
for parameterKey in parameters.keys {
// Retrieve the values
let obj = parameters[parameterKey]
if let parameterDict = obj as? [String:CGFloat] {
if let startValue = parameterDict[FilterStartValuesKey], let endValue = parameterDict[FilterEndValuesKey] {
// Calculate the current value
let value = startValue + ((endValue - startValue) * self.progress)
// Set the value
filter.setValue(value, forKey: parameterKey)
}
}
}
// Set the input image
filter.setValue(ciimage, forKey: kCIInputImageKey)
if let img0 = filter.outputImage, let img1 = img0 {
ciimage = img1
}
}
return UIImage(CIImage: ciimage)
}
}
@@ -0,0 +1,243 @@
//
// M13ProgressImage.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
A progress bar where progress is shown by cutting an image.
@note This progress bar does not have in indeterminate mode and does not respond to actions.
*/
@IBDesignable
public class M13ProgressImage: M13ProgressView {
//-------------------------------
// MARK: Properties
//-------------------------------
/**
The direction the progress bar travels in as the progress nears completion. (What direction the fill proceeds in.)
*/
@IBInspectable public var progressDirection: M13ProgressBarProgressDirection = .LeadingToTrailing {
didSet {
progressUpdate?()
}
}
/**
The image to use when showing progress.
*/
@IBInspectable public var progressImage: UIImage! {
didSet {
progressUpdate?()
}
}
/**
Whether or not to draw the greyscale background.
*/
@IBInspectable public var drawGreyscaleBackground: Bool = true {
didSet {
progressUpdate?()
}
}
//-------------------------------
// MARK: Protected Variables
//-------------------------------
/**
The UIImageView that shows the progress image.
*/
internal var progressView: UIImageView!
/**
Link to the display to keep animations in sync.
*/
internal var displayLink: CADisplayLink!
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("progressDirection") {
if let direction = M13ProgressBarProgressDirection(rawValue: aDecoder.decodeIntegerForKey("progressDirection")) {
progressDirection = direction
}
}
if aDecoder.containsValueForKey("progressImage") {
if let img = aDecoder.decodeObjectForKey("progressImage") as? UIImage {
progressImage = img
}
}
if aDecoder.containsValueForKey("drawGreyscaleBackground") {
drawGreyscaleBackground = aDecoder.decodeBoolForKey("drawGreyscaleBackground")
}
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
internal func sharedSetup() {
// Set the defaults
self.clipsToBounds = false
layer.backgroundColor = UIColor.clearColor().CGColor
// Set the progress image view
progressView = UIImageView(frame: self.bounds)
progressView.contentMode = .ScaleAspectFit
addSubview(progressView)
// Layout
layoutSubviews()
// Set the progress animation.
weak var weakSelf: M13ProgressImage? = self
progressUpdate = {() -> Void in
if let retainedSelf = weakSelf {
retainedSelf.progressView.image = retainedSelf.createImageForCurrentProgress()
}
}
// There is no indeterminate animation.
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(progressDirection.rawValue, forKey: "progressDirection")
aCoder.encodeObject(progressImage, forKey: "progressImage")
aCoder.encodeBool(drawGreyscaleBackground, forKey: "drawGreyscaleBackground")
super.encodeWithCoder(aCoder)
}
public override func prepareForInterfaceBuilder() {
sharedSetup()
super.prepareForInterfaceBuilder()
}
//-------------------------------
// MARK: Actions
//-------------------------------
//-------------------------------
// MARK: Layout
//-------------------------------
public override func intrinsicContentSize() -> CGSize {
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric)
}
//-------------------------------
// MARK: Draw Functions
//-------------------------------
public func createImageForCurrentProgress() -> UIImage?
{
// Create image rectangle with current image width/height
let imageRect = CGRectMake(0, 0, progressImage.size.width * progressImage.scale, progressImage.size.height * progressImage.scale)
let width = imageRect.size.width
let height = imageRect.size.height
// The pixels will be painted to this array
let BPP = 4 // 4 bytes per pixel (alpha-red-green-blue)
let memsize = Int(width) * Int(height)
let pixels = UnsafeMutablePointer<UInt32>.alloc(memsize)
// Clear the pixels so any transparency is preserved
pixels.initializeFrom(Repeat(count: memsize, repeatedValue: 0))
//Create a context with ARGB pixels
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo.ByteOrder32Little.rawValue | CGImageAlphaInfo.PremultipliedLast.rawValue
let context = CGBitmapContextCreate(pixels, Int(width), Int(height), 8, Int(width) * BPP, colorSpace, bitmapInfo)
// Paint the bitmap to our context which will fill in the pixels array
CGContextDrawImage(context, CGRectMake(0, 0, width, height), progressImage.CGImage)
// Calculate the ranges to make greyscale or transparent
var xFrom: Int = 0
var xTo : Int = Int(width)
var yFrom: Int = 0
var yTo : Int = Int(height)
if (progressDirection == .BottomToTop) {
yTo = Int(height * (1 - self.progress))
} else if (progressDirection == .TopToBottom) {
yFrom = Int(height * self.progress)
} else if (progressDirection == .LeadingToTrailing) {
xFrom = Int(width * self.progress)
} else if (progressDirection == .TrailingToLeading) {
xTo = Int(width * (1 - self.progress))
}
for (var x = xFrom; x < xTo; ++x) {
for (var y = yFrom; y < yTo; ++y) {
// Get the pixel
let index = (y * Int(width) + x)
// Convert
if drawGreyscaleBackground {
let value = pixels[index]
// Mask out the alpha component
let alpha = value & 0x000000FF
// Mask out the red-green-blue component values, and bitshift them down to one byte
let r0 = UInt8((value & 0x0000FF00) >> 8)
let g0 = UInt8((value & 0x00FF0000) >> 16)
let b0 = UInt8((value & 0xFF000000) >> 24)
if false { "TODO: grayscale has a very green hue to it -- should be more gray" }
// Convert each red-green-blue component value to grayscale using luma coding
// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
let r1 = UInt8(0.299 * CGFloat(r0))
let g1 = UInt8(0.587 * CGFloat(g0))
let b1 = UInt8(0.114 * CGFloat(b0))
// Set the current pixel to gray
// Bitshift the red-green-blue component values left so we can OR them into a 4-byte pixel value
let r2 = UInt32(r1) << 8
let g2 = UInt32(g1) << 16
let b2 = UInt32(b1) << 24
pixels[index] = alpha | r2 | g2 | b2
} else {
// Convert the current pixel to transparent
pixels[index] = 0
}
}
}
// We're done with the pixel array, so release it
pixels.dealloc(memsize)
// Create a new CGImageRef from our context with the modified pixels, then
// Make a new UIImage to return
if let image = CGBitmapContextCreateImage(context) {
return UIImage(CGImage: image, scale: progressImage.scale, orientation: .Up)
}
return nil
}
}
+109
View File
@@ -0,0 +1,109 @@
//
// M13ProgressPie.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
A progress view that shows progress with a pie chart.
*/
@IBDesignable
public class M13ProgressPie: M13ProgressCircular {
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
override internal func sharedSetup() {
super.sharedSetup()
// Set the defaults.
self.clipsToBounds = false
layer.backgroundColor = UIColor.clearColor().CGColor
// Set the progress animation.
weak var weakSelf: M13ProgressPie? = self
progressUpdate = {() -> Void in
if let retainedSelf = weakSelf {
// Create parameters to draw ring
var startAngle = CGFloat(-M_PI_2)
var endAngle = startAngle + (2.0 * CGFloat(M_PI) * retainedSelf.progress)
let clockwise = (retainedSelf.progressDirection == .Clockwise)
if !clockwise {
// For counter-clockwise, subtract angles from 360 degrees, and swap start-end
let tmp = CGFloat(M_PI) - startAngle
startAngle = CGFloat(M_PI) - endAngle
endAngle = tmp
}
// Draw background
retainedSelf.drawBackground()
// Draw progress ring
let center = retainedSelf.centerOfCircle()
let radius = retainedSelf.maxRadius()
let path = retainedSelf.createPieSlicePath(center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
retainedSelf.progressLayer.path = path.CGPath
}
}
// Set the indeterminate animation.
indeterminateUpdate = {(frameDuration: CFTimeInterval) -> Void in
if let retainedSelf = weakSelf {
// Create parameters to draw progress
let startAngle = CGFloat(retainedSelf.indeterminateAnimationAngle)
let endAngle = startAngle + CGFloat(M_PI) * 2.0 * 0.8 // 80% of a circle
let deltaAngle = CGFloat(frameDuration * 2.0 * M_PI)
if retainedSelf.progressDirection == .CounterClockwise {
// CounterClockwise
retainedSelf.indeterminateAnimationAngle -= deltaAngle
} else {
// Clockwise
retainedSelf.indeterminateAnimationAngle += deltaAngle
}
// Draw background
retainedSelf.drawBackground()
// Draw path
let center = retainedSelf.centerOfCircle()
let radius = retainedSelf.maxRadius()
let path = retainedSelf.createPieSlicePath(center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: false)
retainedSelf.progressLayer.path = path.CGPath
}
}
}
}
@@ -0,0 +1,315 @@
//
// M13ProgressRing.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
A progress view stylized similarly to the iOS 7 App store progress view.
*/
@IBDesignable
public class M13ProgressRing: M13ProgressCircular {
//-------------------------------
// MARK: Properties
//-------------------------------
@IBInspectable public var percentage: Bool = false {
didSet {
percentageLabel.hidden = !percentage
setNeedsLayout()
progressUpdate?()
}
}
@IBInspectable public var progressRingWidth :Int = 0 {
didSet {
setNeedsLayout()
progressUpdate?()
}
}
//-------------------------------
// MARK: Property Overrides
//-------------------------------
override public var indeterminate: Bool {
didSet {
let tmp = indeterminate
super.indeterminate = tmp
if indeterminate {
progressLayer.hidden = true
percentageLabel.hidden = true
} else {
progressLayer.hidden = false
percentageLabel.hidden = !percentage
}
setNeedsLayout()
progressUpdate?()
}
}
//-------------------------------
// MARK: Protected Variables
//-------------------------------
/** The number formatter to display the progress percentage. */
internal var percentageFormatter: NSNumberFormatter!
/** The label that shows the percentage. */
internal var percentageLabel: UILabel!
/** Ring widths after validation and bounds adjustments */
internal var adjustedProgressRingWidth :CGFloat = 0
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("percentage") {
percentage = aDecoder.decodeBoolForKey("percentage")
}
if aDecoder.containsValueForKey("progressRingWidth") {
progressRingWidth = aDecoder.decodeIntegerForKey("progressRingWidth")
}
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
internal override func sharedSetup() {
super.sharedSetup()
// Set the defaults.
self.clipsToBounds = false
layer.backgroundColor = UIColor.clearColor().CGColor
// Set up the indeterminate layer
indeterminateLayer.strokeColor = secondaryColor.CGColor
indeterminateLayer.fillColor = nil
// Set up the progress layer
progressLayer.strokeColor = tintColor.CGColor
progressLayer.fillColor = nil
adjustProgressRingWidth()
// Set up the number formatter
percentageFormatter = NSNumberFormatter()
percentageFormatter.numberStyle = .PercentStyle
// Set the percentage label
percentageLabel = UILabel(frame: self.bounds)
percentageLabel.textAlignment = .Center
percentageLabel.contentMode = .Center
self.addSubview(percentageLabel)
// Set the progress animation.
weak var weakSelf: M13ProgressRing? = self
progressUpdate = {() -> Void in
if let retainedSelf = weakSelf {
// Create parameters to draw ring
let clockwise = (retainedSelf.progressDirection == .Clockwise)
var startAngle = CGFloat(-M_PI_2)
var endAngle = startAngle + (2.0 * CGFloat(M_PI) * retainedSelf.progress)
if !clockwise {
// For counter-clockwise, subtract angles from 360 degrees, and swap start-end
let tmp = CGFloat(M_PI) - startAngle
startAngle = CGFloat(M_PI) - endAngle
endAngle = tmp
}
// Draw background
retainedSelf.drawBackground()
// Draw progress ring
let center = retainedSelf.centerOfCircle()
let radius = retainedSelf.maxRadius() - retainedSelf.adjustedProgressRingWidth / 2.0
let path = UIBezierPath()
path.addArcWithCenter(center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
retainedSelf.progressLayer.path = path.CGPath
// Draw percentage
if retainedSelf.percentage && retainedSelf.state == .Normal {
retainedSelf.drawPercentage()
}
}
}
// Set the indeterminate animation.
indeterminateUpdate = {(frameDuration: CFTimeInterval) -> Void in
if let retainedSelf = weakSelf {
retainedSelf.hidePercentage()
// Create parameters to draw progress
let startAngle = CGFloat(retainedSelf.indeterminateAnimationAngle)
let endAngle = startAngle + CGFloat(M_PI) * 2.0 * 0.8 // 80% of a circle
let deltaAngle = CGFloat(frameDuration * 2.0 * M_PI)
if retainedSelf.progressDirection == .CounterClockwise {
// CounterClockwise
retainedSelf.indeterminateAnimationAngle -= deltaAngle
} else {
// Clockwise
retainedSelf.indeterminateAnimationAngle += deltaAngle
}
// Draw path
let center = retainedSelf.centerOfCircle()
let radius = retainedSelf.maxRadius() - retainedSelf.adjustedBackgroundRingWidth / 2.0
let path = UIBezierPath()
path.addArcWithCenter(center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
retainedSelf.indeterminateLayer.path = path.CGPath
}
}
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeBool(percentage, forKey: "percentage")
aCoder.encodeInteger(progressRingWidth, forKey: "progressRingWidth")
super.encodeWithCoder(aCoder)
}
//-------------------------------
// MARK: Actions
//-------------------------------
public override func setState(state: M13ProgressViewState, animated: Bool) {
super.setState(state, animated: animated)
var toColor1: UIColor = tintColor
var toColor2: UIColor = secondaryColor
switch state {
case .Normal:
hideIcon()
if percentage {
drawPercentage()
}
break
case .Success:
hidePercentage()
drawSuccess()
toColor1 = successColor
if indeterminate {
toColor2 = successColor
}
break
case .Failure:
hidePercentage()
drawFailure()
toColor1 = failureColor
if indeterminate {
toColor2 = failureColor
}
break
}
if !animated {
progressLayer.strokeColor = toColor1.CGColor
indeterminateLayer.strokeColor = toColor2.CGColor
} else {
let colorAnimation1: CABasicAnimation = CABasicAnimation(keyPath: "strokeColor")
colorAnimation1.fromValue = progressLayer.backgroundColor!
colorAnimation1.fillMode = kCAFillModeForwards
colorAnimation1.removedOnCompletion = false
colorAnimation1.duration = animationDuration
let colorAnimation2: CABasicAnimation = CABasicAnimation(keyPath: "strokeColor")
colorAnimation2.fromValue = indeterminateLayer.backgroundColor!
colorAnimation2.fillMode = kCAFillModeForwards
colorAnimation2.removedOnCompletion = false
colorAnimation2.duration = animationDuration
colorAnimation1.toValue = toColor1.CGColor
progressLayer.addAnimation(colorAnimation1, forKey: "strokeColor")
progressLayer.strokeColor = toColor1.CGColor
colorAnimation2.toValue = toColor2.CGColor
indeterminateLayer.addAnimation(colorAnimation2, forKey: "strokeColor")
indeterminateLayer.strokeColor = toColor2.CGColor
}
setNeedsLayout()
progressUpdate?()
}
//-------------------------------
// MARK: Layout
//-------------------------------
public override func layoutSubviews() {
super.layoutSubviews()
adjustProgressRingWidth()
// Percentage label
if percentage {
percentageLabel.frame = self.bounds
percentageLabel.font = UIFont.systemFontOfSize(self.bounds.size.width / 5)
percentageLabel.textColor = tintColor
}
// Update progress frame
progressUpdate?()
}
public func adjustProgressRingWidth()
{
if progressRingWidth > 0 {
adjustedProgressRingWidth = CGFloat(progressRingWidth)
} else {
adjustedProgressRingWidth = adjustedBackgroundRingWidth * 3.0
}
progressLayer.lineWidth = adjustedProgressRingWidth
}
//-------------------------------
// MARK: Draw Functions
//-------------------------------
public func drawPercentage()
{
percentageLabel.text = percentageFormatter.stringFromNumber(self.progress)
}
public func hidePercentage()
{
percentageLabel.text = ""
}
//-------------------------------
// MARK: Other
//-------------------------------
public override func tintColorDidChange() {
super.tintColorDidChange()
progressLayer.fillColor = nil
progressLayer.strokeColor = tintColor.CGColor
percentageLabel.textColor = tintColor
}
}
@@ -0,0 +1,391 @@
//
// M13ProgressSegmentedRing.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
The segment boundary types.
- Wedge:
- Rectangle:
*/
public enum M13ProgressViewSegmentedRingSegmentBoundaryType: Int, RawRepresentable {
///
case Wedge
///
case Rectangle
}
/**
Progress is shown by a ring split up into segments.
*/
@IBDesignable
public class M13ProgressSegmentedRing: M13ProgressRing {
//-------------------------------
// MARK: Properties
//-------------------------------
/**
The number of segments to display in the progress view.
*/
@IBInspectable public var numberOfSegments: Int = 10
/**
The angle of the separation between the segments in radians.
*/
@IBInspectable public var segmentSeparationAngle :CGFloat = 0.1
/**
The type of boundary between segments.
*/
@IBInspectable public var segmentBoundaryType: M13ProgressViewSegmentedRingSegmentBoundaryType = .Wedge {
didSet {
updateAngles()
progressUpdate?()
}
}
//-------------------------------
// MARK: Property Overrides
//-------------------------------
/**
The secondary color of the progress view.
*/
override public var secondaryColor: UIColor {
didSet {
indeterminateLayer.strokeColor = nil
indeterminateLayer.fillColor = secondaryColor.CGColor
}
}
//-------------------------------
// MARK: Protected Variables
//-------------------------------
// The calculated angles of the concentric rings
internal var outerRingAngle :CGFloat = 0.1
internal var innerRingAngle :CGFloat = 0.1
internal var segmentSeparationInnerAngle :CGFloat = 0.1
//-------------------------------
// MARK: Initalization
//-------------------------------
override public init() {
super.init()
sharedSetup()
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("numberOfSegments") {
numberOfSegments = aDecoder.decodeIntegerForKey("numberOfSegments")
}
if aDecoder.containsValueForKey("segmentSeparationAngle") {
segmentSeparationAngle = CGFloat(aDecoder.decodeDoubleForKey("segmentSeparationAngle"))
}
if aDecoder.containsValueForKey("segmentBoundaryType") {
if let aSegmentBoundaryType = M13ProgressViewSegmentedRingSegmentBoundaryType(rawValue: aDecoder.decodeIntegerForKey("segmentBoundaryType")) {
segmentBoundaryType = aSegmentBoundaryType
}
}
super.init(coder: aDecoder)
sharedSetup()
}
override public init(frame: CGRect) {
super.init(frame: frame)
sharedSetup()
}
internal override func sharedSetup() {
super.sharedSetup()
// Set the defaults.
self.clipsToBounds = false
layer.backgroundColor = UIColor.clearColor().CGColor
// Set up the indeterminate layer
indeterminateLayer.strokeColor = nil
indeterminateLayer.fillColor = secondaryColor.CGColor
// Set up the progress layer
progressLayer.strokeColor = nil
progressLayer.fillColor = tintColor.CGColor
adjustProgressRingWidth()
// Set the progress animation.
weak var weakSelf: M13ProgressSegmentedRing? = self
progressUpdate = {() -> Void in
if let retainedSelf = weakSelf {
// Draw background
retainedSelf.drawSegmentedBackground()
// Draw progress ring
retainedSelf.drawSegmentedProgress()
// Draw percentage
if retainedSelf.percentage && retainedSelf.state == .Normal {
retainedSelf.drawPercentage()
}
}
}
// Set the indeterminate animation.
indeterminateUpdate = {(frameDuration: CFTimeInterval) -> Void in
if let retainedSelf = weakSelf {
retainedSelf.hidePercentage()
// Create parameters to draw progress
let startAngle = CGFloat(retainedSelf.indeterminateAnimationAngle)
let deltaAngle = CGFloat(frameDuration * M_PI)
if retainedSelf.progressDirection == .CounterClockwise {
// CounterClockwise
retainedSelf.indeterminateAnimationAngle -= deltaAngle
} else {
// Clockwise
retainedSelf.indeterminateAnimationAngle += deltaAngle
}
// Draw animated background
retainedSelf.drawSegmentedIndeterminate(startAngle, segmentsToDraw: retainedSelf.numberOfSegments)
}
}
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(numberOfSegments, forKey: "numberOfSegments")
aCoder.encodeDouble(Double(segmentSeparationAngle), forKey: "segmentSeparationAngle")
aCoder.encodeInteger(segmentBoundaryType.rawValue, forKey: "segmentBoundaryType")
super.encodeWithCoder(aCoder)
}
//-------------------------------
// MARK: Actions
//-------------------------------
public override func setState(state: M13ProgressViewState, animated: Bool) {
super.setState(state, animated: animated)
// Remove strokeColor animations and assignments that were added during super.setState()
progressLayer.removeAnimationForKey("strokeColor")
progressLayer.strokeColor = nil
indeterminateLayer.removeAnimationForKey("strokeColor")
indeterminateLayer.strokeColor = nil
// Select colors based on state
var toColor1: UIColor = tintColor
var toColor2: UIColor = secondaryColor
switch state {
case .Normal:
break
case .Success:
toColor1 = successColor
if indeterminate {
toColor2 = successColor
}
break
case .Failure:
toColor1 = failureColor
if indeterminate {
toColor2 = failureColor
}
break
}
if !animated {
progressLayer.fillColor = toColor1.CGColor
indeterminateLayer.fillColor = toColor2.CGColor
} else {
let colorAnimation1: CABasicAnimation = CABasicAnimation(keyPath: "fillColor")
colorAnimation1.fromValue = progressLayer.backgroundColor!
colorAnimation1.fillMode = kCAFillModeForwards
colorAnimation1.removedOnCompletion = false
colorAnimation1.duration = animationDuration
let colorAnimation2: CABasicAnimation = CABasicAnimation(keyPath: "fillColor")
colorAnimation2.fromValue = indeterminateLayer.backgroundColor!
colorAnimation2.fillMode = kCAFillModeForwards
colorAnimation2.removedOnCompletion = false
colorAnimation2.duration = animationDuration
colorAnimation1.toValue = toColor1.CGColor
progressLayer.addAnimation(colorAnimation1, forKey: "fillColor")
progressLayer.fillColor = toColor1.CGColor
colorAnimation2.toValue = toColor2.CGColor
indeterminateLayer.addAnimation(colorAnimation2, forKey: "fillColor")
indeterminateLayer.fillColor = toColor2.CGColor
}
setNeedsLayout()
progressUpdate?()
}
//-------------------------------
// MARK: Layout
//-------------------------------
public override func layoutSubviews() {
super.layoutSubviews()
updateAngles()
// Update progress frame
progressUpdate?()
}
internal func updateAngles() {
// Calculate the outer ring angle for the progress segment.
outerRingAngle = CGFloat(2.0 * M_PI) / CGFloat(numberOfSegments) - segmentSeparationAngle
// Calculate the angle gap for the inner ring
let radius = maxRadius()
segmentSeparationInnerAngle = 2.0 * asin((radius * sin(segmentSeparationAngle / 2.0)) / (radius - CGFloat(progressRingWidth)))
// Calculate the inner ring angle for the progress segment.
innerRingAngle = CGFloat(2.0 * M_PI) / CGFloat(numberOfSegments) - segmentSeparationInnerAngle
}
public func numberOfFullSegments() -> Int
{
return Int(floor(progress * CGFloat(numberOfSegments)))
}
//-------------------------------
// MARK: Draw Functions
//-------------------------------
public func drawSegmentedIndeterminate(startAngle: CGFloat, segmentsToDraw: Int)
{
// Create parameters to draw background
// The background segments are drawn counterclockwise, start with the outer ring, add an arc counterclockwise. Then add the coresponding arc for the inner ring clockwise. Then close the path. The line connecting the two arcs is not needed. From tests it seems to be created automatically.
var outerStartAngle = CGFloat(-M_PI_2) + startAngle
// Skip half of a separation angle, since the first separation will be centered upward.
outerStartAngle -= segmentSeparationAngle / 2.0
// Calculate the inner start angle position
var innerStartAngle = CGFloat(-M_PI_2) + startAngle
innerStartAngle -= segmentSeparationInnerAngle / 2.0 + innerRingAngle
// Create the path ref that all the paths will be appended
let pathListRef = CGPathCreateMutable()
// Create each segment
let center = centerOfCircle()
let radius = maxRadius()
let radiusInner = radius - CGFloat(progressRingWidth)
for (var i = 0; i < segmentsToDraw; ++i) {
// Create the outer ring segment
let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: outerStartAngle, endAngle: (outerStartAngle - outerRingAngle), clockwise: false)
// Create the inner ring segment
if (segmentBoundaryType == .Wedge) {
path.addArcWithCenter(center, radius: radiusInner, startAngle: (outerStartAngle - outerRingAngle), endAngle: outerStartAngle, clockwise: true)
} else if (segmentBoundaryType == .Rectangle) {
path.addArcWithCenter(center, radius: radiusInner, startAngle: innerStartAngle, endAngle: (innerStartAngle + innerRingAngle), clockwise: true)
}
path.closePath()
// Add the segment to the path ref
CGPathAddPath(pathListRef, nil, path.CGPath)
// Setup for the next segment
outerStartAngle -= outerRingAngle + segmentSeparationAngle
innerStartAngle -= innerRingAngle + segmentSeparationInnerAngle
}
// Set the path
indeterminateLayer.path = pathListRef
indeterminateLayer.transform = getTransformation()
}
public func drawSegmentedBackground()
{
let segmentsToDraw = numberOfSegments - numberOfFullSegments()
drawSegmentedIndeterminate(0, segmentsToDraw: segmentsToDraw)
}
public func drawSegmentedProgress()
{
// Create parameters to draw background
// The progress segments are drawn clockwise, start with the outer ring, add an arc clockwise. Then add the coresponding arc for the inner ring counterclockwise. Then close the path. The line connecting the two arcs is not needed. From tests it seems to be created automatically.
var outerStartAngle = CGFloat(-M_PI_2)
// Skip half of a separation angle, since the first separation will be centered upward.
outerStartAngle += segmentSeparationAngle / 2.0
// Calculate the inner start angle position
var innerStartAngle = CGFloat(-M_PI_2)
innerStartAngle += segmentSeparationInnerAngle / 2.0 + innerRingAngle
// Create the path ref that all the paths will be appended
let pathListRef = CGPathCreateMutable()
// Create each segment
let center = centerOfCircle()
let radius = maxRadius()
let radiusInner = radius - CGFloat(progressRingWidth)
let stopper = numberOfFullSegments()
for (var i = 0; i < stopper; ++i) {
// Create the outer ring segment
let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: outerStartAngle, endAngle: (outerStartAngle + outerRingAngle), clockwise: true)
// Create the inner ring segment
if (segmentBoundaryType == .Wedge) {
path.addArcWithCenter(center, radius: radiusInner, startAngle: (outerStartAngle + outerRingAngle), endAngle: outerStartAngle, clockwise: false)
} else if (segmentBoundaryType == .Rectangle) {
path.addArcWithCenter(center, radius: radiusInner, startAngle: innerStartAngle, endAngle: (innerStartAngle - innerRingAngle), clockwise: false)
}
path.closePath()
// Add the segment to the path ref
CGPathAddPath(pathListRef, nil, path.CGPath)
// Setup for the next segment
outerStartAngle += outerRingAngle + segmentSeparationAngle
innerStartAngle += innerRingAngle + segmentSeparationInnerAngle
}
// Set the path
progressLayer.path = pathListRef
progressLayer.transform = getTransformation()
}
public func getTransformation() -> CATransform3D
{
if progressDirection == .CounterClockwise {
let rotation = CATransform3DMakeRotation(CGFloat(M_PI), 0.0, 1.0, 0.0)
let x = self.bounds.size.width
let translation = CATransform3DMakeTranslation(x, 0, 0)
return CATransform3DConcat(rotation, translation)
}
return CATransform3DIdentity
}
//-------------------------------
// MARK: Other
//-------------------------------
public override func tintColorDidChange() {
super.tintColorDidChange()
progressLayer.fillColor = tintColor.CGColor
progressLayer.strokeColor = nil
}
}
@@ -0,0 +1,295 @@
//
// M13ProgressView.swift
// M13ProgressSuite
//
/*
Copyright (c) 2015 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import UIKit
/**
The possible states a progress view can be in.
- None: The default state of a progress bar.
- Success: The state that shows an action completed successfully.
- Failure: The state that shows an action failed to complete.
*/
public enum M13ProgressViewState: Int, RawRepresentable {
/// The default state of a progress bar.
case Normal
/// The state that shows an action completed successfully.
case Success
/// The state that shows an action failed to complete.
case Failure
}
/**
A standardized base upon which to build progress views.
*/
@IBDesignable
public class M13ProgressView: UIView {
//-------------------------------
// MARK: Appearance
//-------------------------------
/**
The secondary color of the progress view.
*/
@IBInspectable public var secondaryColor: UIColor = UIColor.lightGrayColor()
/**
The primary color when the progress view is in the success state.
*/
@IBInspectable public var successColor: UIColor = UIColor(red: 63.0/255.0, green: 226.0/255.0, blue: 80.0/255.0, alpha: 1.0)
/**
The primary color when the progress view is in the failure state.
*/
@IBInspectable public var failureColor: UIColor = UIColor(red: 249.0/255.0, green: 37.0/255.0, blue: 0.0, alpha: 1.0)
//-------------------------------
// MARK: Properties
//-------------------------------
/**
Wether or not the progress view is in an indeterminate state.
*/
@IBInspectable public var indeterminate: Bool = false {
didSet {
if indeterminate && indeterminateDisplayLink == nil {
// Create the display link
indeterminateDisplayLink = CADisplayLink(target: self, selector: "animateIndeterminate:")
indeterminateDisplayLink?.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)
} else if !indeterminate && indeterminateDisplayLink != nil {
// Remove the display link as the animation is not needed anymore.
indeterminateDisplayLink?.invalidate()
indeterminateDisplayLink = nil
}
}
}
/**
The duration of the animations performed by the progress view in seconds.
*/
@IBInspectable public var animationDuration: NSTimeInterval = 0.3
/**
The duration of the indeterminate animation loop in seconds.
*/
@IBInspectable public var indeterminateAnimationDuration: NSTimeInterval = 2.0
/**
The progress displayed by the progress view.
*/
@IBInspectable public private(set) var progress: CGFloat = 0.0
/**
The current state of the progress view
*/
@IBInspectable public private(set) var state: M13ProgressViewState = M13ProgressViewState.Normal
//-------------------------------
// MARK: Animation
//-------------------------------
/**
The progress at the beginning of the animation.
*/
private var progressFromValue: CGFloat = 0.0
/**
The progress at the end of the animation.
*/
private var progressToValue: CGFloat = 0.0
/**
The start time of the animation.
*/
private var animationStartTime: CFTimeInterval?
/**
The display link controlling progress animations.
*/
private var determinateDisplayLink: CADisplayLink?
/**
The display link controlling indeterminate animations.
*/
private var indeterminateDisplayLink: CADisplayLink?
/**
The block of code that updates the user interface when the progress is set, animated or not. The changes made should reflect the current value of the progress variable.
- note: If capturing variable that is linked to `self`, be sure to do a "weak self" conversion.
*/
internal var progressUpdate: (() -> Void)?
/**
The block of code that update the user interface during the indeterminate state. This code is tied into a CADisplayLink that will run this code each frame.
- note: If capturing variable that is linked to `self`, be sure to do a "weak self" conversion.
*/
internal var indeterminateUpdate: ((frameDuration: CFTimeInterval) -> Void)?
//-------------------------------
// MARK: Initalization
//-------------------------------
public init() {
super.init(frame: CGRectZero)
}
required public init?(coder aDecoder: NSCoder) {
if aDecoder.containsValueForKey("indeterminate") {
indeterminate = aDecoder.decodeBoolForKey("indeterminate")
}
if aDecoder.containsValueForKey("animationDuration") {
animationDuration = aDecoder.decodeDoubleForKey("animationDuration")
}
if aDecoder.containsValueForKey("progress") {
progress = CGFloat(aDecoder.decodeFloatForKey("progress"))
}
if aDecoder.containsValueForKey("state") {
if let aState = M13ProgressViewState(rawValue: aDecoder.decodeIntegerForKey("state")) {
state = aState
}
}
if let color: UIColor = aDecoder.decodeObjectOfClass(UIColor.self, forKey: "secondaryColor") {
secondaryColor = color
}
if let color: UIColor = aDecoder.decodeObjectOfClass(UIColor.self, forKey: "successColor") {
successColor = color
}
if let color: UIColor = aDecoder.decodeObjectOfClass(UIColor.self, forKey: "failureColor") {
failureColor = color
}
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
public override func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(secondaryColor, forKey: "secondaryColor")
aCoder.encodeObject(successColor, forKey: "successColor")
aCoder.encodeObject(failureColor, forKey: "failureColor")
aCoder.encodeBool(indeterminate, forKey: "indeterminate")
aCoder.encodeDouble(animationDuration, forKey: "animationDuration")
aCoder.encodeFloat(Float(progress), forKey: "progress")
aCoder.encodeInteger(state.rawValue, forKey: "state")
super.encodeWithCoder(aCoder)
}
//-------------------------------
// MARK: Actions
//-------------------------------
/**
Set the progress displayed in the progress view.
- parameter progress: The progress to be displayed by the progress view.
- parameter animated: Wether or not to animate the change.
*/
public func setProgress(progress: CGFloat, animated: Bool) {
if animated == false {
// Remove the display link as the animation is not needed anymore.
determinateDisplayLink?.invalidate()
determinateDisplayLink = nil
animationStartTime = nil
// Update the progress
self.progress = progress
progressUpdate?()
} else {
// If the display link does not exist, create it.
if determinateDisplayLink == nil {
determinateDisplayLink = CADisplayLink(target: self, selector: "animateProgress:")
determinateDisplayLink?.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes)
}
// Update the values for the animation.
progressFromValue = self.progress
progressToValue = progress > 1.0 ? 1.0 : progress
}
}
/**
Updates the progress in sync with the `CADisplayLink`, such that any changes are animated.
- parameter displayLink: The display link that is asking to calculate changes before the next render cycle.
*/
internal func animateProgress(displayLink: CADisplayLink) {
// Set the animation start time on the first displayed frame. The timestamp will read 0.0 until the first frame.
if animationStartTime == nil {
animationStartTime = displayLink.timestamp
return
}
weak var weakSelf: M13ProgressView? = self
dispatch_async(dispatch_get_main_queue()) { () -> Void in
if let weakSelf = weakSelf {
let dt: Double = (weakSelf.determinateDisplayLink!.timestamp - weakSelf.animationStartTime!) / weakSelf.animationDuration
if dt >= 1.0 {
// The animation is complete.
// Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
weakSelf.determinateDisplayLink?.invalidate()
weakSelf.determinateDisplayLink = nil
weakSelf.setProgress(weakSelf.progressToValue, animated: false)
} else {
//Update the progress and the display
weakSelf.progress = weakSelf.progressFromValue + (CGFloat(dt) * (weakSelf.progressToValue - weakSelf.progressFromValue))
weakSelf.progressUpdate?()
}
}
}
}
/**
Updates the indeterminate animation in sync with the `CADisplayLink`, such that any changes are animated.
- parameter displayLink: The display link that is asking to calculate changes before the next render cycle.
*/
internal func animateIndeterminate(displayLink: CADisplayLink) {
weak var weakSelf: M13ProgressView? = self
dispatch_async(dispatch_get_main_queue()) { () -> Void in
weakSelf?.indeterminateUpdate?(frameDuration: displayLink.duration)
}
}
/**
Perform the given action.
- note: Not all progress views support all actions.
- seealso: `M13ProgressViewState`
- parameter action: The action to perform.
- parameter animated: Wether or not to animate the change.
*/
public func setState(state: M13ProgressViewState, animated: Bool) {
self.state = state
}
//-------------------------------
// MARK: Layout and Drawing
//-------------------------------
public override func layoutSubviews() {
super.layoutSubviews()
// Just update the progress in case it is not currently animating. The indeterminate animation will update on the next frame.
progressUpdate?()
}
}
-52
View File
@@ -1,52 +0,0 @@
//
// M13ProgressView.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <UIKit/UIKit.h>
typedef enum {
/**Resets the action and returns the progress view to its normal state.*/
M13ProgressViewActionNone,
/**The progress view shows success.*/
M13ProgressViewActionSuccess,
/**The progress view shows failure.*/
M13ProgressViewActionFailure
} M13ProgressViewAction;
/**A standardized base upon which to build progress views for applications. This allows one to use any subclass progress view in any component that use this standard.*/
@interface M13ProgressView : UIView
/**@name Appearance*/
/**The primary color of the `M13ProgressView`.*/
@property (nonatomic, retain) UIColor *primaryColor;
/**The secondary color of the `M13ProgressView`.*/
@property (nonatomic, retain) UIColor *secondaryColor;
/**@name Properties*/
/**Wether or not the progress view is indeterminate.*/
@property (nonatomic, assign) BOOL indeterminate;
/**The durations of animations in seconds.*/
@property (nonatomic, assign) CGFloat animationDuration;
/**The progress displayed to the user.*/
@property (nonatomic, readonly) CGFloat progress;
/**@name Actions*/
/**Set the progress of the `M13ProgressView`.
@param progress The progress to show on the progress view.
@param animated Wether or not to animate the progress change.*/
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated;
/**Perform the given action if defined. Usually showing success or failure.
@param action The action to perform.
@param animated Wether or not to animate the change*/
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated;
@end
-37
View File
@@ -1,37 +0,0 @@
//
// M13ProgressView.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
@implementation M13ProgressView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
_progress = progress;
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
//To be overriden in subclasses
}
@end
@@ -1,51 +0,0 @@
//
// M13ProgressViewBar.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewBarPercentagePositionLeft,
M13ProgressViewBarPercentagePositionRight,
M13ProgressViewBarPercentagePositionTop,
M13ProgressViewBarPercentagePositionBottom,
} M13ProgressViewBarPercentagePosition;
typedef enum {
M13ProgressViewBarProgressDirectionLeftToRight,
M13ProgressViewBarProgressDirectionBottomToTop,
M13ProgressViewBarProgressDirectionRightToLeft,
M13ProgressViewBarProgressDirectionTopToBottom
} M13ProgressViewBarProgressDirection;
/**A replacement for UIProgressBar.*/
@interface M13ProgressViewBar : M13ProgressView
/**@name Appearance*/
/**The direction of progress. (What direction the fill proceeds in.)*/
@property (nonatomic, assign) M13ProgressViewBarProgressDirection progressDirection;
/**The thickness of the progress bar.*/
@property (nonatomic, assign) CGFloat progressBarThickness;
/**The corner radius of the progress bar.*/
@property (nonatomic, assign) CGFloat progressBarCornerRadius;
/**@name Actions*/
/**The color the bar changes to for the success action.*/
@property (nonatomic, retain) UIColor *successColor;
/**The color the bar changes to for the failure action.*/
@property (nonatomic, retain) UIColor *failureColor;
/**@name Percentage*/
/**Wether or not to show percentage text. If shown exterior to the progress bar, the progress bar is shifted to make room for the text.*/
@property (nonatomic, assign) BOOL showPercentage;
/**The location of the percentage in comparison to the progress bar.*/
@property (nonatomic, assign) M13ProgressViewBarPercentagePosition percentagePosition;
@end
-637
View File
@@ -1,637 +0,0 @@
//
// M13ProgressViewBar.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewBar.h"
@interface M13ProgressViewBar ()
/**The number formatter to display the progress percentage.*/
@property (nonatomic, retain) NSNumberFormatter *percentageFormatter;
/**The label that shows the percentage.*/
@property (nonatomic, retain) CATextLayer *percentageLabel;
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**The view of the progress bar.*/
@property (nonatomic, retain) UIView *progressBar;
/**The layer that displays progress in the progress bar.*/
@property (nonatomic, retain) CAShapeLayer *progressLayer;
/**The layer that is used to animate indeterminate progress.*/
@property (nonatomic, retain) CALayer *indeterminateLayer;
/**The action currently being performed.*/
@property (nonatomic, assign) M13ProgressViewAction currentAction;
@end
@implementation M13ProgressViewBar
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defauts
self.animationDuration = .3;
_progressDirection = M13ProgressViewBarProgressDirectionLeftToRight;
_progressBarThickness = 2;
_progressBarCornerRadius = _progressBarThickness / 2.0;
_percentagePosition = M13ProgressViewBarPercentagePositionRight;
_showPercentage = YES;
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
_successColor = [UIColor colorWithRed:63.0f/255.0f green:226.0f/255.0f blue:80.0f/255.0f alpha:1];
_failureColor = [UIColor colorWithRed:249.0f/255.0f green:37.0f/255.0f blue:0 alpha:1];
//Set up the number formatter
_percentageFormatter = [[NSNumberFormatter alloc] init];
_percentageFormatter.numberStyle = NSNumberFormatterPercentStyle;
//Progress View
_progressBar = [[UIView alloc] init];
_progressBar.backgroundColor = self.secondaryColor;
_progressBar.layer.cornerRadius = _progressBarCornerRadius;
_progressBar.clipsToBounds = YES;
[self addSubview:_progressBar];
//ProgressLayer
_progressLayer = [CAShapeLayer layer];
_progressLayer.strokeColor = self.primaryColor.CGColor;
_progressLayer.lineWidth = _progressBarThickness;
_progressLayer.lineCap = kCALineCapRound;
[_progressBar.layer addSublayer:_progressLayer];
//Percentage
_percentageLabel = [CATextLayer layer];
_percentageLabel.foregroundColor = self.primaryColor.CGColor;
_percentageLabel.alignmentMode = kCAAlignmentCenter;
UILabel *temp = [[UILabel alloc] init];
_percentageLabel.font = (__bridge CFTypeRef)temp.font;
_percentageLabel.contentsScale = [UIScreen mainScreen].scale;
[self.layer addSublayer:_percentageLabel];
//IndeterminateLayer
_indeterminateLayer = [CALayer layer];
_indeterminateLayer.backgroundColor = self.primaryColor.CGColor;
_indeterminateLayer.cornerRadius = _progressBarCornerRadius;
_indeterminateLayer.opacity = 0;
[_progressBar.layer addSublayer:_indeterminateLayer];
//Layout
[self layoutSubviews];
}
#pragma mark Appearance
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
_percentageLabel.foregroundColor = self.primaryColor.CGColor;
_progressLayer.strokeColor = self.primaryColor.CGColor;
_indeterminateLayer.backgroundColor = self.primaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
_progressBar.backgroundColor = self.secondaryColor;
[self setNeedsDisplay];
}
- (void)setSuccessColor:(UIColor *)successColor
{
_successColor = successColor;
[self setNeedsDisplay];
}
- (void)setFailureColor:(UIColor *)failureColor
{
_failureColor = failureColor;
[self setNeedsDisplay];
}
- (void)setShowPercentage:(BOOL)showPercentage
{
_showPercentage = showPercentage;
_percentageLabel.hidden = !_showPercentage;
[self layoutSubviews];
[self setNeedsDisplay];
}
- (void)setPercentagePosition:(M13ProgressViewBarPercentagePosition)percentagePosition
{
_percentagePosition = percentagePosition;
[self layoutSubviews];
[self setNeedsDisplay];
}
- (void)setProgressDirection:(M13ProgressViewBarProgressDirection)progressDirection
{
_progressDirection = progressDirection;
[self layoutSubviews];
[self setNeedsDisplay];
}
- (void)setProgressBarThickness:(CGFloat)progressBarThickness
{
_progressBarThickness = progressBarThickness;
//Update the layer size
[self setNeedsDisplay];
//Update strokeWidth
_progressLayer.lineWidth = progressBarThickness;
[self invalidateIntrinsicContentSize];
}
- (void)setProgressBarCornerRadius:(CGFloat)progressBarCornerRadius
{
_progressBarCornerRadius = progressBarCornerRadius;
// Update the layer size
[self setNeedsDisplay];
// Update corner radius for layers
_progressBar.layer.cornerRadius = _progressBarCornerRadius;
_indeterminateLayer.cornerRadius = _progressBarCornerRadius;
[self invalidateIntrinsicContentSize];
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
if (action == M13ProgressViewActionNone && _currentAction != M13ProgressViewActionNone) {
_currentAction = action;
_percentageLabel.string = [_percentageFormatter stringFromNumber:[NSNumber numberWithFloat:self.progress]];
[self setNeedsDisplay];
[CATransaction begin];
CABasicAnimation *barAnimation = [self barColorAnimation];
CABasicAnimation *textAnimation = [self textColorAnimation];
CABasicAnimation *indeterminateAnimation = [self indeterminateColorAnimation];
barAnimation.fromValue = (id)_progressLayer.strokeColor;
barAnimation.toValue = (id)self.primaryColor.CGColor;
textAnimation.fromValue = (id)_percentageLabel.foregroundColor;
textAnimation.toValue = (id)self.primaryColor.CGColor;
indeterminateAnimation.fromValue = (id)_indeterminateLayer.backgroundColor;
indeterminateAnimation.toValue = (id)self.primaryColor.CGColor;
[_progressLayer addAnimation:barAnimation forKey:@"strokeColor"];
[_percentageLabel addAnimation:textAnimation forKey:@"foregroundLayer"];
[_indeterminateLayer addAnimation:indeterminateAnimation forKey:@"backgroundColor"];
[CATransaction commit];
} else if (action == M13ProgressViewActionSuccess && _currentAction != M13ProgressViewActionSuccess) {
_currentAction = action;
_percentageLabel.string = @"";
[self setNeedsDisplay];
[CATransaction begin];
CABasicAnimation *barAnimation = [self barColorAnimation];
CABasicAnimation *textAnimation = [self textColorAnimation];
CABasicAnimation *indeterminateAnimation = [self indeterminateColorAnimation];
barAnimation.fromValue = (id)_progressLayer.strokeColor;
barAnimation.toValue = (id)_successColor.CGColor;
textAnimation.fromValue = (id)_percentageLabel.foregroundColor;
textAnimation.toValue = (id)_successColor.CGColor;
indeterminateAnimation.fromValue = (id)_indeterminateLayer.backgroundColor;
indeterminateAnimation.toValue = (id)_successColor.CGColor;
[_progressLayer addAnimation:barAnimation forKey:@"strokeColor"];
[_percentageLabel addAnimation:textAnimation forKey:@"foregroundLayer"];
[_indeterminateLayer addAnimation:indeterminateAnimation forKey:@"backgroundColor"];
[CATransaction commit];
} else if (action == M13ProgressViewActionFailure && _currentAction != M13ProgressViewActionFailure) {
_currentAction = action;
_percentageLabel.string = @"";
[self setNeedsDisplay];
[CATransaction begin];
CABasicAnimation *barAnimation = [self barColorAnimation];
CABasicAnimation *textAnimation = [self textColorAnimation];
CABasicAnimation *indeterminateAnimation = [self indeterminateColorAnimation];
barAnimation.fromValue = (id)_progressLayer.strokeColor;
barAnimation.toValue = (id)_failureColor.CGColor;
textAnimation.fromValue = (id)_percentageLabel.foregroundColor;
textAnimation.toValue = (id)_failureColor.CGColor;
indeterminateAnimation.fromValue = (id)_indeterminateLayer.backgroundColor;
indeterminateAnimation.toValue = (id)_failureColor.CGColor;
[_progressLayer addAnimation:barAnimation forKey:@"strokeColor"];
[_percentageLabel addAnimation:textAnimation forKey:@"foregroundLayer"];
[_indeterminateLayer addAnimation:indeterminateAnimation forKey:@"backgroundColor"];
[CATransaction commit];
}
}
- (CABasicAnimation *)barColorAnimation
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeColor"];
animation.duration = 2 * self.animationDuration;
animation.repeatCount = 1;
//Prevent the animation from resetting
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
return animation;
}
- (CABasicAnimation *)textColorAnimation
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"foregroundColor"];
animation.duration = 2 * self.animationDuration;
animation.repeatCount = 1;
//Prevent the animation from resetting
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
return animation;
}
- (CABasicAnimation *)indeterminateColorAnimation
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
animation.duration = 2 * self.animationDuration;
animation.repeatCount = 1;
//Prevent the animation from resetting
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
return animation;
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
if (self.indeterminate == YES) {
//show the indeterminate view
_indeterminateLayer.opacity = 1;
_progressLayer.opacity = 0;
//Create the animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 5 * self.animationDuration;
animation.repeatCount = HUGE_VALF;
animation.removedOnCompletion = YES;
//Set the animation control points
if (_progressDirection == M13ProgressViewBarProgressDirectionLeftToRight) {
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(-_indeterminateLayer.frame.size.width, 0)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width + _progressBar.bounds.size.width, 0)];
} else if (_progressDirection == M13ProgressViewBarProgressDirectionRightToLeft) {
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width + _progressBar.bounds.size.width, 0)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(-_indeterminateLayer.frame.size.width, 0)];
} else if (_progressDirection == M13ProgressViewBarProgressDirectionBottomToTop) {
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, _progressBar.bounds.size.height + _indeterminateLayer.frame.size.height)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(0, -_indeterminateLayer.frame.size.height)];
} else if (_progressDirection == M13ProgressViewBarProgressDirectionTopToBottom) {
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(0, _progressBar.bounds.size.height + _indeterminateLayer.frame.size.height)];
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, -_indeterminateLayer.frame.size.height)];
}
[_indeterminateLayer addAnimation:animation forKey:@"position"];
_percentageLabel.string = @"";
} else {
//Hide the indeterminate view
_indeterminateLayer.opacity = 0;
_progressLayer.opacity = 1;
//Remove all animations
[_indeterminateLayer removeAnimationForKey:@"position"];
//Reset progress text
_percentageLabel.string = [_percentageFormatter stringFromNumber:[NSNumber numberWithFloat:self.progress]];
}
}
#pragma mark Layout
- (void)layoutSubviews
{
[super layoutSubviews];
if (_showPercentage) {
//If the percentage is shown, the layout calculation must take the label frame into account.
CGRect labelFrame = CGRectZero;
CGRect progressFrame = CGRectZero;
CGFloat labelProgressBufferDistance = _progressBarThickness * 4;
//Calculate progress bar and label size. The bar is long along its direction of travel. The direction perpendicular to travel is the thickness.
if (_progressDirection == M13ProgressViewBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewBarProgressDirectionRightToLeft) {
//Calculate the bar's and label's position
if (_percentagePosition == M13ProgressViewBarPercentagePositionBottom) {
//Calculate the sizes
progressFrame.size = CGSizeMake(self.bounds.size.width, _progressBarThickness);
labelFrame.size = CGSizeMake(self.bounds.size.width, self.bounds.size.height - labelProgressBufferDistance - progressFrame.size.height);
//Align the bar with the top of self
progressFrame.origin = CGPointMake(0, 0);
//Align the label with the bottom of self
labelFrame.origin = CGPointMake(0, labelProgressBufferDistance + progressFrame.size.height);
//Set frames of progress and label
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set label font
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
} else if (_percentagePosition == M13ProgressViewBarPercentagePositionTop) {
//Calculate the sizes
progressFrame.size = CGSizeMake(self.bounds.size.width, _progressBarThickness);
labelFrame.size = CGSizeMake(self.bounds.size.width, self.bounds.size.height - labelProgressBufferDistance - progressFrame.size.height);
//Align the bar with the bottom of self
progressFrame.origin = CGPointMake(0, self.bounds.size.height - progressFrame.size.height);
//Align the label with the top of self
labelFrame.origin = CGPointMake(0, 0);
//Set the frames of progress and label
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set the label font
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
} else if (_percentagePosition == M13ProgressViewBarPercentagePositionLeft) {
//Calculate sizes.
labelFrame.size = [self maximumSizeForFontSizeThatFitsInRect:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
progressFrame.size = CGSizeMake(self.bounds.size.width - labelFrame.size.width - labelProgressBufferDistance, _progressBarThickness);
//Align the label to the left
labelFrame.origin = CGPointMake(0, 0);
progressFrame.origin = CGPointMake(labelFrame.size.width + labelProgressBufferDistance, (self.bounds.size.height / 2.0) - (_progressBarThickness / 2.0));
//Set the frames
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set the font size
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
} else if (_percentagePosition == M13ProgressViewBarPercentagePositionRight) {
//Calculate sizes.
labelFrame.size = [self maximumSizeForFontSizeThatFitsInRect:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
progressFrame.size = CGSizeMake(self.bounds.size.width - labelFrame.size.width - labelProgressBufferDistance, _progressBarThickness);
//Align the label to the right
progressFrame.origin = CGPointMake(0, (self.bounds.size.height / 2.0) - (_progressBarThickness / 2.0));
labelFrame.origin = CGPointMake(progressFrame.size.width + labelProgressBufferDistance, 0);
//Set the frames
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set the font size
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
}
} else if (_progressDirection == M13ProgressViewBarProgressDirectionBottomToTop || _progressDirection == M13ProgressViewBarProgressDirectionTopToBottom) {
//Calculate the bar's and label's position
if (_percentagePosition == M13ProgressViewBarPercentagePositionLeft) {
//Calculate sizes
progressFrame.size = CGSizeMake(_progressBarThickness, self.bounds.size.height);
labelFrame.size = CGSizeMake(self.bounds.size.width - labelProgressBufferDistance - progressFrame.size.width, self.bounds.size.height);
//Align the bar with the right side of the frame.
progressFrame.origin = CGPointMake(self.bounds.size.width - labelProgressBufferDistance - progressFrame.size.width, 0);
labelFrame.origin = CGPointMake(0, 0);
//Set the frames of the progress and label
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set the label font
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
} else if (_percentagePosition == M13ProgressViewBarPercentagePositionRight) {
//Calculate Sizes
progressFrame.size = CGSizeMake(_progressBarThickness, self.bounds.size.height);
labelFrame.size = CGSizeMake(self.bounds.size.width - labelProgressBufferDistance - progressFrame.size.width, self.bounds.size.height);
//Align the bar with the left side of the frame
progressFrame.origin = CGPointMake(0, 0);
labelFrame.origin = CGPointMake(labelProgressBufferDistance + progressFrame.size.width, 0);
//Set the frames of the progress and label
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set the label font
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
} else if (_percentagePosition == M13ProgressViewBarPercentagePositionTop) {
//Calculate Sizes
labelFrame.size = [self maximumSizeForFontSizeThatFitsInRect:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
progressFrame.size = CGSizeMake(_progressBarThickness, self.bounds.size.height - labelFrame.size.height - labelProgressBufferDistance);
//Align the bar with the bottom of frame
labelFrame.origin = CGPointMake(0, 0);
progressFrame.origin = CGPointMake((self.bounds.size.width / 2.0) - (_progressBarThickness / 2.0), labelFrame.size.height + labelProgressBufferDistance);
//Set the frames
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set the label font
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
} else if (_percentagePosition == M13ProgressViewBarPercentagePositionBottom) {
//Calculate Sizes
labelFrame.size = [self maximumSizeForFontSizeThatFitsInRect:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
progressFrame.size = CGSizeMake(_progressBarThickness, self.bounds.size.height - labelFrame.size.height - labelProgressBufferDistance);
//Align the bar with the bottom of frame
labelFrame.origin = CGPointMake(0, self.bounds.size.height - labelFrame.size.height);
progressFrame.origin = CGPointMake((self.bounds.size.width / 2.0) - (_progressBarThickness / 2.0), 0);
//Set the frames
_progressBar.frame = progressFrame;
_percentageLabel.frame = labelFrame;
//Set the label font
UIFont *font = [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:labelFrame]];
_percentageLabel.font = (__bridge CFTypeRef)font;
_percentageLabel.fontSize = font.pointSize;
}
}
} else {
//Label not shown, The progress bar can be the full size of the progress view.
if (_progressDirection == M13ProgressViewBarProgressDirectionBottomToTop || _progressDirection == M13ProgressViewBarProgressDirectionTopToBottom) {
_progressBar.frame = CGRectMake((self.bounds.size.width / 2.0) - (_progressBarThickness / 2.0), 0, _progressBarThickness, self.bounds.size.height);
} else if (_progressDirection == M13ProgressViewBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewBarProgressDirectionRightToLeft) {
_progressBar.frame = CGRectMake(0, (self.bounds.size.height / 2.0) - (_progressBarThickness / 2.0), self.bounds.size.width, _progressBarThickness);
}
}
//Set the indeterminate layer frame
if (_progressDirection == M13ProgressViewBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewBarProgressDirectionRightToLeft) {
//Set the indeterminate layer frame (reset the animation so the animation starts and ends at the right points)
[_indeterminateLayer removeAllAnimations];
_indeterminateLayer.frame = CGRectMake(0, 0, _progressBar.frame.size.width * .2, _progressBarThickness * 2);
[self setIndeterminate:self.indeterminate];
} else {
//Set the indeterminate layer frame (reset the animation so the animation starts and ends at the right points)
[_indeterminateLayer removeAllAnimations];
_indeterminateLayer.frame = CGRectMake(0, 0, _progressBarThickness * 2, _progressBar.frame.size.height * .2);
[self setIndeterminate:self.indeterminate];
}
//Set the progress layer frame
_progressLayer.frame = _progressBar.bounds;
}
- (CGSize)intrinsicContentSize
{
CGFloat labelProgressBufferDistance = _progressBarThickness * 4;
//Progress bar thickness is the only non-scale based size parameter.
if (_progressDirection == M13ProgressViewBarProgressDirectionBottomToTop || _progressDirection == M13ProgressViewBarProgressDirectionTopToBottom) {
if (_percentagePosition == M13ProgressViewBarPercentagePositionTop || _percentagePosition == M13ProgressViewBarPercentagePositionBottom) {
return CGSizeMake(_progressBarThickness, labelProgressBufferDistance);
} else {
return CGSizeMake(_progressBarThickness + labelProgressBufferDistance, UIViewNoIntrinsicMetric);
}
} else {
if (_percentagePosition == M13ProgressViewBarPercentagePositionTop || _percentagePosition == M13ProgressViewBarPercentagePositionBottom) {
return CGSizeMake(UIViewNoIntrinsicMetric, _progressBarThickness + labelProgressBufferDistance);
} else {
return CGSizeMake(labelProgressBufferDistance, _progressBarThickness);
}
}
}
- (CGFloat)maximumFontSizeThatFitsInRect:(CGRect)frame
{
//Starting parameters
CGFloat fontSize = 0;
CGRect textRect = CGRectZero;
//While the width and height are within the constraint
while (frame.size.width > textRect.size.width && frame.size.height > textRect.size.height && textRect.size.width >= textRect.size.height) {
//Increase font size
fontSize += 1;
//Calculate frame size
textRect = [@"100%" boundingRectWithSize:frame.size options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName : [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:fontSize]} context:nil];
}
//Decrease font size as the previous one was the last size that worked
return fontSize - 1;
}
- (CGSize)maximumSizeForFontSizeThatFitsInRect:(CGRect)frame
{
CGRect textRect = [@"100%" boundingRectWithSize:frame.size options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName : [UIFont fontWithName:((__bridge UIFont*)_percentageLabel.font).fontName size:[self maximumFontSizeThatFitsInRect:frame]]} context:nil];
return textRect.size;
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
//Update Percentage Label
if (_currentAction == M13ProgressViewActionSuccess) {
_percentageLabel.string = @"";
} else if (_currentAction == M13ProgressViewActionFailure) {
_percentageLabel.string = @"";
} else if (_currentAction == M13ProgressViewActionNone) {
if (!self.indeterminate) {
_percentageLabel.string = [_percentageFormatter stringFromNumber:[NSNumber numberWithFloat:self.progress]];
} else {
_percentageLabel.string = @"";
}
}
//Set path to draw the progress
if (self.progress != 0) {
if (_progressDirection == M13ProgressViewBarProgressDirectionLeftToRight) {
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, _progressBarThickness / 2.0)];
[path addLineToPoint:CGPointMake(_progressLayer.frame.size.width * self.progress, _progressBarThickness / 2.0)];
[_progressLayer setPath:path.CGPath];
} else if (_progressDirection == M13ProgressViewBarProgressDirectionRightToLeft) {
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(_progressLayer.frame.size.width, _progressBarThickness / 2.0)];
[path addLineToPoint:CGPointMake(_progressLayer.frame.size.width * (1 - self.progress), _progressBarThickness / 2.0)];
[_progressLayer setPath:path.CGPath];
} else if (_progressDirection == M13ProgressViewBarProgressDirectionBottomToTop) {
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(_progressBarThickness / 2.0, _progressLayer.frame.size.height)];
[path addLineToPoint:CGPointMake(_progressBarThickness / 2.0, _progressLayer.frame.size.height * (1 - self.progress))];
[_progressLayer setPath:path.CGPath];
} else if (_progressDirection == M13ProgressViewBarProgressDirectionTopToBottom) {
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(_progressBarThickness / 2.0, 0)];
[path addLineToPoint:CGPointMake(_progressBarThickness / 2.0, _progressLayer.frame.size.height * self.progress)];
[_progressLayer setPath:path.CGPath];
}
} else {
[_progressLayer setPath:nil];
}
}
@end
@@ -1,47 +0,0 @@
//
// M13ProgressViewBorderedBar.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewBorderedBarProgressDirectionLeftToRight,
M13ProgressViewBorderedBarProgressDirectionBottomToTop,
M13ProgressViewBorderedBarProgressDirectionRightToLeft,
M13ProgressViewBorderedBarProgressDirectionTopToBottom
} M13ProgressViewBorderedBarProgressDirection;
typedef enum {
M13ProgressViewBorderedBarCornerTypeSquare,
M13ProgressViewBorderedBarCornerTypeRounded,
M13ProgressViewBorderedBarCornerTypeCircle
} M13ProgressViewBorderedBarCornerType;
/**A Progress bar with a thick border.*/
@interface M13ProgressViewBorderedBar : M13ProgressView
/**@name Appearance*/
/**The direction of progress. (What direction the fill proceeds in.)*/
@property (nonatomic, assign) M13ProgressViewBorderedBarProgressDirection progressDirection;
/**The type of corner to display on the bar.*/
@property (nonatomic, assign) M13ProgressViewBorderedBarCornerType cornerType;
/**The corner radius of the ber if the corner type is set to Rounded.*/
@property (nonatomic, assign) CGFloat cornerRadius;
/**The border width of the progress bar.*/
@property (nonatomic, assign) CGFloat borderWidth;
/**@name Actions*/
/**The color the bar changes to for the success action.*/
@property (nonatomic, retain) UIColor *successColor;
/**The color the bar changes to for the failure action.*/
@property (nonatomic, retain) UIColor *failureColor;
@end
@@ -1,449 +0,0 @@
//
// M13ProgressViewBorderedBar.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewBorderedBar.h"
@interface M13ProgressViewBorderedBar ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**The layer that contains the progress layer. That also masks the progress layer.*/
@property (nonatomic, retain) CALayer *progressSuperLayer;
/**The layer that displays progress in the progress bar.*/
@property (nonatomic, retain) CAShapeLayer *progressLayer;
/**The mask layer for the progress layer.*/
@property (nonatomic, retain) CAShapeLayer *maskLayer;
/**The background layer that displays the border.*/
@property (nonatomic, retain) CAShapeLayer *backgroundLayer;
/**The layer that is used to animate indeterminate progress.*/
@property (nonatomic, retain) CALayer *indeterminateLayer;
/**The action currently being performed.*/
@property (nonatomic, assign) M13ProgressViewAction currentAction;
@end
@implementation M13ProgressViewBorderedBar
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defauts
self.animationDuration = .3;
_borderWidth = 1.0;
_cornerRadius = 3.0;
_progressDirection = M13ProgressViewBorderedBarProgressDirectionLeftToRight;
_cornerType = M13ProgressViewBorderedBarCornerTypeSquare;
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = self.primaryColor;
_successColor = [UIColor colorWithRed:63.0f/255.0f green:226.0f/255.0f blue:80.0f/255.0f alpha:1];
_failureColor = [UIColor colorWithRed:249.0f/255.0f green:37.0f/255.0f blue:0 alpha:1];
//BackgroundLayer
_backgroundLayer = [CAShapeLayer layer];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
_backgroundLayer.fillColor = nil;
_backgroundLayer.lineWidth = _borderWidth;
[self.layer addSublayer:_backgroundLayer];
//ProgressLayer
_progressLayer = [CAShapeLayer layer];
_progressLayer.fillColor = self.primaryColor.CGColor;
_maskLayer = [CAShapeLayer layer];
_maskLayer.fillColor = [UIColor blackColor].CGColor;
_maskLayer.backgroundColor = [UIColor clearColor].CGColor;
_progressSuperLayer = [CALayer layer];
_progressSuperLayer.mask = _maskLayer;
[_progressSuperLayer addSublayer:_progressLayer];
[self.layer addSublayer:_progressSuperLayer];
//IndeterminateLayer
_indeterminateLayer = [CALayer layer];
_indeterminateLayer.backgroundColor = self.primaryColor.CGColor;
_indeterminateLayer.opacity = 0;
[_progressSuperLayer addSublayer:_indeterminateLayer];
//Layout
[self layoutSubviews];
}
#pragma mark Appearance
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
_progressLayer.fillColor = self.primaryColor.CGColor;
_indeterminateLayer.backgroundColor = self.primaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setSuccessColor:(UIColor *)successColor
{
_successColor = successColor;
[self setNeedsDisplay];
}
- (void)setFailureColor:(UIColor *)failureColor
{
_failureColor = failureColor;
[self setNeedsDisplay];
}
- (void)setProgressDirection:(M13ProgressViewBorderedBarProgressDirection)progressDirection
{
_progressDirection = progressDirection;
[self setNeedsDisplay];
}
- (void)setCornerType:(M13ProgressViewBorderedBarCornerType)cornerType
{
_cornerType = cornerType;
[self calculateMask];
[self setNeedsDisplay];
}
- (void)setCornerRadius:(CGFloat)cornerRadius
{
_cornerRadius = cornerRadius;
[self calculateMask];
[self setNeedsDisplay];
}
- (void)setBorderWidth:(CGFloat)borderWidth
{
_borderWidth = borderWidth;
_backgroundLayer.lineWidth = borderWidth;
[self calculateMask];
[self setNeedsDisplay];
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
if (action == M13ProgressViewActionNone && _currentAction != M13ProgressViewActionNone) {
_currentAction = action;
[self setNeedsDisplay];
[CATransaction begin];
CABasicAnimation *barAnimation = [self barColorAnimation];
CABasicAnimation *indeterminateAnimation = [self indeterminateColorAnimation];
barAnimation.fromValue = (id)_progressLayer.strokeColor;
barAnimation.toValue = (id)self.primaryColor.CGColor;
indeterminateAnimation.fromValue = (id)_indeterminateLayer.backgroundColor;
indeterminateAnimation.toValue = (id)self.primaryColor.CGColor;
[_progressLayer addAnimation:barAnimation forKey:@"fillColor"];
[_indeterminateLayer addAnimation:indeterminateAnimation forKey:@"backgroundColor"];
[CATransaction commit];
} else if (action == M13ProgressViewActionSuccess && _currentAction != M13ProgressViewActionSuccess) {
_currentAction = action;
[self setNeedsDisplay];
[CATransaction begin];
CABasicAnimation *barAnimation = [self barColorAnimation];
CABasicAnimation *indeterminateAnimation = [self indeterminateColorAnimation];
barAnimation.fromValue = (id)_progressLayer.strokeColor;
barAnimation.toValue = (id)_successColor.CGColor;
indeterminateAnimation.fromValue = (id)_indeterminateLayer.backgroundColor;
indeterminateAnimation.toValue = (id)_successColor.CGColor;
[_progressLayer addAnimation:barAnimation forKey:@"fillColor"];
[_indeterminateLayer addAnimation:indeterminateAnimation forKey:@"backgroundColor"];
[CATransaction commit];
} else if (action == M13ProgressViewActionFailure && _currentAction != M13ProgressViewActionFailure) {
_currentAction = action;
[self setNeedsDisplay];
[CATransaction begin];
CABasicAnimation *barAnimation = [self barColorAnimation];
CABasicAnimation *indeterminateAnimation = [self indeterminateColorAnimation];
barAnimation.fromValue = (id)_progressLayer.strokeColor;
barAnimation.toValue = (id)_failureColor.CGColor;
indeterminateAnimation.fromValue = (id)_indeterminateLayer.backgroundColor;
indeterminateAnimation.toValue = (id)_failureColor.CGColor;
[_progressLayer addAnimation:barAnimation forKey:@"fillColor"];
[_indeterminateLayer addAnimation:indeterminateAnimation forKey:@"backgroundColor"];
[CATransaction commit];
}
}
- (CABasicAnimation *)barColorAnimation
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"fillColor"];
animation.duration = 2 * self.animationDuration;
animation.repeatCount = 1;
//Prevent the animation from resetting
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
return animation;
}
- (CABasicAnimation *)indeterminateColorAnimation
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
animation.duration = 2 * self.animationDuration;
animation.repeatCount = 1;
//Prevent the animation from resetting
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
return animation;
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
if (self.indeterminate == YES) {
//show the indeterminate view
_indeterminateLayer.opacity = 1;
_progressLayer.opacity = 0;
//Create the animation
[_indeterminateLayer removeAnimationForKey:@"position"];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 5 * self.animationDuration;
animation.repeatCount = HUGE_VALF;
animation.removedOnCompletion = YES;
//Set the animation control points
if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionLeftToRight) {
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(-_indeterminateLayer.frame.size.width, _indeterminateLayer.frame.size.height / 2)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width + self.bounds.size.width, _indeterminateLayer.frame.size.height / 2)];
} else if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionRightToLeft) {
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width + self.bounds.size.width, _indeterminateLayer.frame.size.height / 2)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(-_indeterminateLayer.frame.size.width, _indeterminateLayer.frame.size.height / 2)];
} else if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionBottomToTop) {
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width / 2, self.bounds.size.height + _indeterminateLayer.frame.size.height)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width / 2, -_indeterminateLayer.frame.size.height)];
} else if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionTopToBottom) {
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width / 2, self.bounds.size.height + _indeterminateLayer.frame.size.height)];
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(_indeterminateLayer.frame.size.width / 2, -_indeterminateLayer.frame.size.height)];
}
[_indeterminateLayer addAnimation:animation forKey:@"position"];
} else {
//Hide the indeterminate view
_indeterminateLayer.opacity = 0;
_progressLayer.opacity = 1;
//Remove all animations
[_indeterminateLayer removeAnimationForKey:@"position"];
//Reset progress text
}
}
- (void)layoutSubviews
{
[super layoutSubviews];
[self calculateMask];
//Set the background layer size
_backgroundLayer.frame = self.bounds;
_progressLayer.frame = self.bounds;
//Set the indeterminate layer frame
if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewBorderedBarProgressDirectionRightToLeft) {
//Set the indeterminate layer frame (reset the animation so the animation starts and ends at the right points)
[_indeterminateLayer removeAllAnimations];
_indeterminateLayer.frame = CGRectMake(0, 0, self.frame.size.width * .4, self.frame.size.height);
[self setIndeterminate:self.indeterminate];
} else {
//Set the indeterminate layer frame (reset the animation so the animation starts and ends at the right points)
[_indeterminateLayer removeAllAnimations];
_indeterminateLayer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height * .4);
[self setIndeterminate:self.indeterminate];
}
}
- (CGSize)intrinsicContentSize
{
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
if (!self.indeterminate) {
[self drawProgress];
}
[self drawBackground];
}
- (void)drawBackground
{
//Create the path to stroke
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_cornerType == M13ProgressViewBorderedBarCornerTypeRounded) {
cornerRadius = _cornerRadius;
} else if (_cornerType == M13ProgressViewBorderedBarCornerTypeCircle) {
if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewBorderedBarProgressDirectionRightToLeft) {
cornerRadius = self.bounds.size.height - _borderWidth;
} else {
cornerRadius = self.bounds.size.width - _borderWidth;
}
}
//Draw the path
CGRect rect = CGRectMake(_borderWidth / 2.0, _borderWidth / 2.0, self.bounds.size.width - _borderWidth, self.bounds.size.height - _borderWidth);
UIBezierPath *path;
if (_cornerType == M13ProgressViewBorderedBarCornerTypeSquare) {
//Having a 0 corner radius does not display properly since the rect displays like it is not closed.
path = [UIBezierPath bezierPathWithRect:rect];
} else {
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];;
}
_backgroundLayer.path = path.CGPath;
}
- (void)drawProgress
{
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_cornerType == M13ProgressViewBorderedBarCornerTypeRounded) {
cornerRadius = _cornerRadius;
} else if (_cornerType == M13ProgressViewBorderedBarCornerTypeCircle) {
if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewBorderedBarProgressDirectionRightToLeft) {
cornerRadius = self.bounds.size.height - (2 * _borderWidth);
} else {
cornerRadius = self.bounds.size.width - (2 * _borderWidth);
}
}
//Draw the path
CGRect rect = CGRectZero;
if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionLeftToRight) {
rect = CGRectMake(_borderWidth * 2, _borderWidth * 2, (self.bounds.size.width - (4 * _borderWidth)) * self.progress, self.bounds.size.height - (4 * _borderWidth));
} else if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionRightToLeft) {
rect = CGRectMake((_borderWidth * 2) + ((self.bounds.size.width - (4 * _borderWidth)) * (1 - self.progress)), _borderWidth * 2, (self.bounds.size.width - (4 * _borderWidth)) * self.progress, self.bounds.size.height - (4 * _borderWidth));
} else if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionBottomToTop) {
rect = CGRectMake(_borderWidth * 2, ((self.bounds.size.height - (4 * _borderWidth)) * (1 - self.progress)) + (2 * _borderWidth), self.bounds.size.width - (4 * _borderWidth), (self.bounds.size.height - (4 * _borderWidth)) * self.progress);
} else if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionTopToBottom) {
rect = CGRectMake(_borderWidth * 2, _borderWidth * 2, self.bounds.size.width - (4 * _borderWidth), (self.bounds.size.height - (4 * _borderWidth)) * self.progress);
}
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
[_progressLayer setPath:path.CGPath];
}
- (void)calculateMask
{
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_cornerType == M13ProgressViewBorderedBarCornerTypeRounded) {
cornerRadius = _cornerRadius;
} else if (_cornerType == M13ProgressViewBorderedBarCornerTypeCircle) {
if (_progressDirection == M13ProgressViewBorderedBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewBorderedBarProgressDirectionRightToLeft) {
cornerRadius = self.bounds.size.height - (2 * _borderWidth);
} else {
cornerRadius = self.bounds.size.width - (2 * _borderWidth);
}
}
//Draw the path
CGRect rect = CGRectMake(_borderWidth * 2, _borderWidth * 2, self.bounds.size.width - (4 * _borderWidth), self.bounds.size.height - (4 * _borderWidth));
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
//Create the mask
_maskLayer.path = path.CGPath;
//Set the frame
_maskLayer.frame = self.bounds;
_progressSuperLayer.frame = self.bounds;
}
@end
@@ -1,44 +0,0 @@
//
// M13ProgressViewFilteredImage.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
#import <CoreImage/CoreImage.h>
#define kM13ProgressViewFilteredImageCIFilterStartValuesKey @"StartValues"
#define kM13ProgressViewFilteredImageCIFilterEndValuesKey @"EndValues"
/**A progress view where progress is shown by changes in CIFilters.
@note This progress bar does not have in indeterminate mode and does not respond to actions.*/
@interface M13ProgressViewFilteredImage : M13ProgressView
/**@name Appearance*/
/**The image to use when showing progress.*/
@property (nonatomic, retain) UIImage *progressImage;
/**The UIImageView that shows the progress image.*/
@property (nonatomic, retain) UIImageView *progressView;
/**The array of CIFilters to apply to the image.
@note The filters need to be encased in a M13ProgressViewCIFilterWrapper*/
@property (nonatomic, retain) NSArray *filters;
/**The dictionaries of dictionaries that coresspond to filter properties to be changed.
NSArray
|------ NSDictionary (Index matches the coresponding CIFilter in filters)
| |---- "Parameter Key" -> NSDictionary
| | |------ "Start Value" -> NSNumber
| | |------ "End Value" -> NSNumber
| |---- "Parameter Key" -> NSDictionary
| |------ "Start Value" -> NSNumber
| |------ "End Value" -> NSNumber
|------ NSDictionary ... */
@property (nonatomic, retain) NSArray *filterParameters;
@end
@@ -1,201 +0,0 @@
//
// M13ProgressViewFilteredImage.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewFilteredImage.h"
@interface M13ProgressViewFilteredImage ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
@end
@implementation M13ProgressViewFilteredImage
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defauts
self.animationDuration = .3;
//Set up the progress view
_progressView = [[UIImageView alloc] init];
_progressView.contentMode = UIViewContentModeScaleAspectFit;
_progressView.frame = self.bounds;
[self addSubview:_progressView];
//Layout
[self layoutSubviews];
}
#pragma mark Appearance
- (void)setProgressImage:(UIImage *)progressImage
{
_progressImage = progressImage;
[_progressView setImage:_progressImage];
[self setNeedsDisplay];
}
- (void)setFilters:(NSArray *)filters
{
_filters = filters;
[self setNeedsDisplay];
}
- (void)setFilterParameters:(NSArray *)filterParameters
{
_filterParameters = filterParameters;
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
//Do Nothing
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
//Do Nothing
}
#pragma mark Layout
- (void)layoutSubviews
{
[super layoutSubviews];
_progressView.frame = self.bounds;
}
- (CGSize)intrinsicContentSize
{
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
//Create the base CIImage
CIImage *image = [CIImage imageWithCGImage:_progressImage.CGImage];
//Change the values of the CIFilters before drawing
for (int i = 0; i < _filters.count; i++) {
CIFilter *filter = _filters[i];
//For each filter
NSDictionary *parameters = _filterParameters[i];
//For each parameter
for (NSString *parameterKey in parameters.allKeys) {
//Retreive the values
NSDictionary *parameterDict = parameters[parameterKey];
CGFloat startValue = [parameterDict[kM13ProgressViewFilteredImageCIFilterStartValuesKey] floatValue];
CGFloat endValue = [parameterDict[kM13ProgressViewFilteredImageCIFilterEndValuesKey] floatValue];
//Calculate the current value
CGFloat value = startValue + ((endValue - startValue) * self.progress);
//Set the value
[filter setValue:[NSNumber numberWithFloat:value] forKey:parameterKey];
}
//Set the input image
[filter setValue:image forKey:kCIInputImageKey];
image = filter.outputImage;
}
//Set the image of the image view.
[_progressView setImage:[UIImage imageWithCIImage:image]];
[super drawRect:rect];
}
@end
@@ -1,35 +0,0 @@
//
// M13ProgressViewImage.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewImageProgressDirectionLeftToRight,
M13ProgressViewImageProgressDirectionBottomToTop,
M13ProgressViewImageProgressDirectionRightToLeft,
M13ProgressViewImageProgressDirectionTopToBottom
} M13ProgressViewImageProgressDirection;
/**A progress bar where progress is shown by cutting an image.
@note This progress bar does not have in indeterminate mode and does not respond to actions.*/
@interface M13ProgressViewImage : M13ProgressView
/**@name Appearance*/
/**The image to use when showing progress.*/
@property (nonatomic, retain) UIImage *progressImage;
/**The direction of progress. (What direction the fill proceeds in.)*/
@property (nonatomic, assign) M13ProgressViewImageProgressDirection progressDirection;
/**Wether or not to draw the greyscale background.*/
@property (nonatomic, assign) BOOL drawGreyscaleBackground;
@end
@@ -1,269 +0,0 @@
//
// M13ProgressViewImage.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewImage.h"
@interface M13ProgressViewImage ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**Allow us to write to the progress.*/
@property (nonatomic, readwrite) CGFloat progress;
/**The UIImageView that shows the progress image.*/
@property (nonatomic, retain) UIImageView *progressView;
@end
@implementation M13ProgressViewImage
@dynamic progress;
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defauts
self.animationDuration = .3;
_progressDirection = M13ProgressViewImageProgressDirectionLeftToRight;
_drawGreyscaleBackground = YES;
//Set the progress view
_progressView = [[UIImageView alloc] init];
_progressView.frame = self.bounds;
_progressView.contentMode = UIViewContentModeScaleAspectFit;
[self addSubview:_progressView];
//Layout
[self layoutSubviews];
}
#pragma mark Appearance
- (void)setProgressDirection:(M13ProgressViewImageProgressDirection)progressDirection
{
_progressDirection = progressDirection;
[self setNeedsDisplay];
}
- (void)setDrawGreyscaleBackground:(BOOL)drawGreyscaleBackground
{
_drawGreyscaleBackground = drawGreyscaleBackground;
[self setNeedsDisplay];
}
- (void)setProgressImage:(UIImage *)progressImage
{
_progressImage = progressImage;
_progressView.image = _progressImage;
[self setNeedsDisplay];
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
//Do Nothing
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
//Do Nothing
}
#pragma mark Layout
- (void)layoutSubviews
{
[super layoutSubviews];
_progressView.frame = self.bounds;
}
- (CGSize)intrinsicContentSize
{
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
[_progressView setImage:[self createImageForCurrentProgress]];
}
- (UIImage *)createImageForCurrentProgress
{
const int ALPHA = 0;
const int RED = 1;
const int GREEN = 2;
const int BLUE = 3;
//Create image rectangle with current image width/height
CGRect imageRect = CGRectMake(0, 0, _progressImage.size.width * _progressImage.scale, _progressImage.size.height * _progressImage.scale);
int width = imageRect.size.width;
int height = imageRect.size.height;
//The pixels will be painted to this array
uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t));
//Clear the pixels so any transparency is preserved
memset(pixels, 0, width * height * sizeof(uint32_t));
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//Create a context with RGBA pixels
CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);
//Paint the bitmap to our context which will fill in the pixels array
CGContextDrawImage(context, CGRectMake(0, 0, width, height), _progressImage.CGImage);
//Calculate the ranges to make greyscale or transparent.
int xFrom = 0;
int xTo = width;
int yFrom = 0;
int yTo = height;
if (_progressDirection == M13ProgressViewImageProgressDirectionBottomToTop) {
yTo = height * (1 - self.progress);
} else if (_progressDirection == M13ProgressViewImageProgressDirectionTopToBottom) {
yFrom = height * self.progress;
} else if (_progressDirection == M13ProgressViewImageProgressDirectionLeftToRight) {
xFrom = width * self.progress;
} else if (_progressDirection == M13ProgressViewImageProgressDirectionRightToLeft) {
xTo = width * (1 - self.progress);
}
for (int x = xFrom; x < xTo; x++) {
for (int y = yFrom; y < yTo; y++) {
//Get the pixel
uint8_t *rgbaPixel = (uint8_t *) &pixels[y * width + x];
//Convert
if (_drawGreyscaleBackground) {
//Convert to grayscale using luma coding: http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
uint32_t gray = 0.3 * rgbaPixel[RED] + 0.59 * rgbaPixel[GREEN] + 0.11 * rgbaPixel[BLUE];
// set the pixels to gray
rgbaPixel[RED] = gray;
rgbaPixel[GREEN] = gray;
rgbaPixel[BLUE] = gray;
} else {
//Convert the pixels to transparant
rgbaPixel[RED] = 0;
rgbaPixel[GREEN] = 0;
rgbaPixel[BLUE] = 0;
rgbaPixel[ALPHA] = 0;
}
}
}
// create a new CGImageRef from our context with the modified pixels
CGImageRef image = CGBitmapContextCreateImage(context);
// we're done with the context, color space, and pixels
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
free(pixels);
// make a new UIImage to return
UIImage *resultUIImage = [UIImage imageWithCGImage:image scale:_progressImage.scale orientation:UIImageOrientationUp];
// we're done with image now too
CGImageRelease(image);
return resultUIImage;
}
@end
@@ -1,47 +0,0 @@
//
// M13ProgressViewLetterpress.h
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 4/28/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewLetterpressPointShapeSquare,
M13ProgressViewLetterpressPointShapeCircle
} M13ProgressViewLetterpressPointShape;
@interface M13ProgressViewLetterpress : M13ProgressView
/**@name Properties*/
/**
The number of grid points in each direction.
*/
@property (nonatomic, assign) CGPoint numberOfGridPoints;
/**
The shape of the grid points.
*/
@property (nonatomic, assign) M13ProgressViewLetterpressPointShape pointShape;
/**
The amount of space between the grid points, as a percentage of the point's size.
*/
@property (nonatomic, assign) CGFloat pointSpacing;
/**
The size of the notch to carve out on one side.
*/
@property (nonatomic, assign) CGSize notchSize;
/**
The spring constant that defines the amount of "spring" the progress view has in its animation.
*/
@property (nonatomic, assign) CGFloat springConstant;
/**
The constant that determines how long the progress view "bounces" for.
*/
@property (nonatomic, assign) CGFloat dampingCoefficient;
/**
The constant that determines how much the springConstant and dampingCoefficent affect the animation.
*/
@property (nonatomic, assign) CGFloat mass;
@end
@@ -1,300 +0,0 @@
//
// M13ProgressViewLetterpress.m
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 4/28/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import "M13ProgressViewLetterpress.h"
@interface LetterpressView : UIView
@property (nonatomic, strong) M13ProgressViewLetterpress *progressView;
@property (nonatomic, assign) CGRect drawRect;
@end
@interface M13ProgressViewLetterpress ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**
The display link that controls the spring animation.
*/
@property (nonatomic, strong) CADisplayLink *springDisplayLink;
@end
@implementation M13ProgressViewLetterpress
{
CGFloat rotation;
CGFloat restRotation;
CGFloat velocity;
LetterpressView *letterpressView;
}
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)dealloc
{
[_springDisplayLink invalidate];
}
- (void)setup
{
//Set defauts
self.animationDuration = 1.0;
_numberOfGridPoints = CGPointMake(3, 3);
_notchSize = CGSizeMake(1, 1);
_pointShape = M13ProgressViewLetterpressPointShapeCircle;
_pointSpacing = 0.0;
rotation = 0;
restRotation = 0;
_springConstant = 200;
_dampingCoefficient = 15;
_mass = 1;
velocity = 0;
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
//Draw and animate a sublayer, since autolayout does not like CATransforms.
letterpressView = [[LetterpressView alloc] init];
letterpressView.backgroundColor = [UIColor clearColor];
letterpressView.progressView = self;
[self setFrame:self.frame];
[self addSubview:letterpressView];
//Set own background color
self.backgroundColor = [UIColor clearColor];
self.clipsToBounds = NO;
//Setup the display link for rotation
_springDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(rotateWithDisplayLink:)];
[_springDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:(id)kCFRunLoopCommonModes];
}
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
//Need to inset the layer since we don't want the corner's cliped
CGFloat radius = MIN(self.frame.size.width, self.frame.size.height);
CGFloat size = radius / sqrtf(2.0);
letterpressView.drawRect = CGRectIntegral(CGRectMake((self.frame.size.width - size) / 2.0, (self.frame.size.height - size) / 2.0, size, size));
letterpressView.frame = CGRectIntegral(CGRectMake((self.frame.size.width - size) / 2.0, (self.frame.size.height - size) / 2.0, size, size));
}
- (void)setNeedsDisplay
{
[super setNeedsDisplay];
[letterpressView setNeedsDisplay];
}
- (CGSize)intrinsicContentSize
{
//Everything is based on scale. No minimum size.
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
}
#pragma mark - Properties
- (void)setNumberOfGridPoints:(CGPoint)numberOfGridPoints
{
_numberOfGridPoints = numberOfGridPoints;
[self setNeedsDisplay];
}
- (void)setPointShape:(M13ProgressViewLetterpressPointShape)pointShape
{
_pointShape = pointShape;
[self setNeedsDisplay];
}
- (void)setPointSpacing:(CGFloat)pointSpacing
{
if (pointSpacing > 1) {
pointSpacing = 1;
} else if (pointSpacing < 0) {
pointSpacing = 0;
}
_pointSpacing = pointSpacing;
[self setNeedsDisplay];
}
- (void)setNotchSize:(CGSize)notchSize
{
_notchSize = notchSize;
[self setNeedsDisplay];
}
#pragma mark - Animation
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)rotateWithDisplayLink:(CADisplayLink *)displayLink
{
//Take account for lag
for (int i = 0; i < displayLink.frameInterval; i++){
//Calculate the new angle
CGFloat displacement = rotation - restRotation;
CGFloat kx = _springConstant * displacement;
CGFloat bv = _dampingCoefficient * velocity;
CGFloat acceleration = (kx + bv) / _mass;
velocity -= (acceleration * displayLink.duration);
rotation += (velocity * displayLink.duration);
//Set the angle
[letterpressView setTransform:CGAffineTransformMakeRotation(rotation * M_PI / 180)];
UIView *view = [[self subviews] lastObject];
[view setTransform:CGAffineTransformMakeRotation(rotation * M_PI / 180)];
//If we are slowing down, animate to a new angle.
if (fabs(velocity) < 1) {
restRotation += (arc4random() & 2 ? 90 : -90);
}
}
}
@end
@implementation LetterpressView
#pragma mark - Drawing
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
//Calculate the corners of the square of the points that we will not draw
CGPoint ignoreTopLeft = CGPointMake((_progressView.numberOfGridPoints.x - _progressView.notchSize.width) / 2, 0);
CGPoint ignoreBottomRight = CGPointMake(_progressView.numberOfGridPoints.x - ((_progressView.numberOfGridPoints.x - _progressView.notchSize.width) / 2), (_progressView.numberOfGridPoints.y - _progressView.notchSize.height) / 2);
//Calculate the point size
CGSize pointSize = CGSizeMake(_drawRect.size.width / _progressView.numberOfGridPoints.x, _drawRect.size.height / _progressView.numberOfGridPoints.y);
//Setup
CGRect pointRect = CGRectZero;
int index = -1;
int indexToFillTo = _progressView.numberOfGridPoints.x * _progressView.numberOfGridPoints.y * _progressView.progress;
//Draw
for (int y = _progressView.numberOfGridPoints.y - 1; y >= 0; y--) {
for (int x = 0; x < _progressView.numberOfGridPoints.x; x++) {
index += 1;
//Are we in a forbidden zone
if (x >= ignoreTopLeft.x && x < ignoreBottomRight.x && y >= ignoreTopLeft.y && y < ignoreBottomRight.y) {
//Move to the next point
continue;
}
//Calculat the rect of the point
pointRect.size = pointSize;
pointRect.origin = CGPointMake(pointSize.width * x, pointSize.height * y);
pointRect = CGRectInset(pointRect, pointSize.width * _progressView.pointSpacing, pointSize.height * _progressView.pointSpacing);
//Set the fill color
if (index < indexToFillTo) {
CGContextSetFillColorWithColor(ctx, _progressView.primaryColor.CGColor);
} else {
CGContextSetFillColorWithColor(ctx, _progressView.secondaryColor.CGColor);
}
//Draw the shape
if (_progressView.pointShape == M13ProgressViewLetterpressPointShapeSquare) {
CGContextFillRect(ctx, pointRect);
} else if (_progressView.pointShape == M13ProgressViewLetterpressPointShapeCircle) {
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:pointRect cornerRadius:(pointRect.size.width / 2.0)];
CGContextBeginPath(ctx);
CGContextAddPath(ctx, path.CGPath);
CGContextFillPath(ctx);
}
}
}
}
@end
@@ -1,62 +0,0 @@
//
// M13ProgressViewMetro.h
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 3/8/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewMetroAnimationShapeEllipse,
M13ProgressViewMetroAnimationShapeRectangle,
M13ProgressViewMetroAnimationShapeLine
} M13ProgressViewMetroAnimationShape;
/**The layer that the `M13ProgressViewMetro` animates.*/
@interface M13ProgressViewMetroDot : CALayer
/**Wether or not the dot is highlighted. The dot becomes highlighted to show progress.*/
@property (nonatomic, assign) BOOL highlighted;
/**The color to show on success.*/
@property (nonatomic, retain) UIColor *successColor;
/**The color to show on failure.*/
@property (nonatomic, retain) UIColor *failureColor;
/**The primary color of the dot.*/
@property (nonatomic, retain) UIColor *primaryColor;
/**The secondary color of the dot.*/
@property (nonatomic, retain) UIColor *secondaryColor;
/**Perform the given action if defined. Usually showing success or failure.
@param action The action to perform.
@param animated Wether or not to animate the change*/
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated;
@end
/**A progress view based off of Windows 8's progress animation.*/
@interface M13ProgressViewMetro : M13ProgressView
/**@name Properties*/
/**The number of dots in the animation.*/
@property (nonatomic, assign) NSUInteger numberOfDots;
/**The shape of the animation.*/
@property (nonatomic, assign) M13ProgressViewMetroAnimationShape animationShape;
/**The size of the dots*/
@property (nonatomic, assign) CGSize dotSize;
/**The dot to display.*/
@property (nonatomic, retain) M13ProgressViewMetroDot *metroDot;
/**@name Appearance*/
/**The color to show on success.*/
@property (nonatomic, retain) UIColor *successColor;
/**The color to show on failure.*/
@property (nonatomic, retain) UIColor *failureColor;
/**@name Actions*/
/**Wether or not the progress view animating.*/
- (BOOL)isAnimating;
/**Begin the animation.*/
- (void)beginAnimating;
/**End the animation.*/
- (void)stopAnimating;
@end
@@ -1,378 +0,0 @@
//
// M13ProgressViewMetro.m
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 3/8/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import "M13ProgressViewMetro.h"
#import "M13ProgressViewMetroDotPolygon.h"
@interface M13ProgressViewMetro ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
@end
@implementation M13ProgressViewMetroDot
{
M13ProgressViewAction currentAction;
}
#pragma mark Initalization
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (id)initWithLayer:(id)layer
{
self = [super initWithLayer:layer];
if (self) {
[self setup];
}
return self;
}
+ (id)layer
{
return [[M13ProgressViewMetroDot alloc] init];
}
- (void)setup
{
_highlighted = NO;
currentAction = M13ProgressViewActionNone;
_primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
_secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
_successColor = [UIColor colorWithRed:63.0f/255.0f green:226.0f/255.0f blue:80.0f/255.0f alpha:1];
_failureColor = [UIColor colorWithRed:249.0f/255.0f green:37.0f/255.0f blue:0 alpha:1];
}
#pragma mark Setters
- (void)setHighlighted:(BOOL)highlighted
{
_highlighted = highlighted;
[self setNeedsDisplay];
}
- (void)setSuccessColor:(UIColor *)successColor
{
_successColor = successColor;
[self setNeedsDisplay];
}
- (void)setFailureColor:(UIColor *)failureColor
{
_failureColor = failureColor;
[self setNeedsDisplay];
}
- (void)setPrimaryColor:(UIColor *)primaryColor
{
_primaryColor = primaryColor;
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
_secondaryColor = secondaryColor;
[self setNeedsDisplay];
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
currentAction = action;
[self setNeedsDisplay];
}
@end
@implementation M13ProgressViewMetro
{
BOOL animating;
NSUInteger currentNumberOfDots;
NSTimer *animationTimer;
UIBezierPath *animationPath;
NSMutableArray *dots;
CGFloat circleSize;
}
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set defaults
self.clipsToBounds = YES;
animating = NO;
_numberOfDots = 6;
_dotSize = CGSizeMake(20, 20);
self.animationDuration = 1.5;
self.animationShape = M13ProgressViewMetroAnimationShapeEllipse;
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
_successColor = [UIColor colorWithRed:63.0f/255.0f green:226.0f/255.0f blue:80.0f/255.0f alpha:1];
_failureColor = [UIColor colorWithRed:249.0f/255.0f green:37.0f/255.0f blue:0 alpha:1];
_metroDot = [[M13ProgressViewMetroDotPolygon alloc] init];
}
#pragma mark Properties
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
if (animating) {
[self stopAnimating];
[self beginAnimating];
}
}
- (BOOL)isAnimating
{
return animating;
}
- (void)setAnimationShape:(M13ProgressViewMetroAnimationShape)animationShape
{
_animationShape = animationShape;
if (_animationShape == M13ProgressViewMetroAnimationShapeEllipse) {
//Inset the size of the dot
CGFloat radius = MIN((self.bounds.size.width - _dotSize.width) / 2, (self.bounds.size.height - _dotSize.height) / 2);
//Create the path
animationPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2) radius:radius startAngle:M_PI_2 endAngle:(-M_PI_2 * 3) clockwise:YES];
} else if (_animationShape == M13ProgressViewMetroAnimationShapeRectangle) {
//Inset the size of the dot
CGRect pathRect = CGRectInset(self.bounds, _dotSize.width, _dotSize.height);
//Create the path
animationPath = [UIBezierPath bezierPath];
[animationPath moveToPoint:CGPointMake((pathRect.size.width / 2) + pathRect.origin.x, pathRect.size.height + pathRect.origin.y)];
[animationPath addLineToPoint:CGPointMake(pathRect.origin.x, pathRect.size.height + pathRect.origin.y)];
[animationPath addLineToPoint:CGPointMake(pathRect.origin.x, pathRect.origin.y)];
[animationPath addLineToPoint:CGPointMake(pathRect.origin.x + pathRect.size.width, pathRect.origin.y)];
[animationPath addLineToPoint:CGPointMake(pathRect.origin.x + pathRect.size.width, pathRect.origin.y + pathRect.size.height)];
[animationPath moveToPoint:CGPointMake((pathRect.size.width / 2) + pathRect.origin.x, pathRect.size.height + pathRect.origin.y)];
} else if (animationShape == M13ProgressViewMetroAnimationShapeLine) {
//Create the path
animationPath = [UIBezierPath bezierPath];
[animationPath moveToPoint:CGPointMake(-_dotSize.width, self.bounds.size.height / 2)];
[animationPath addLineToPoint:CGPointMake(self.bounds.size.width + _dotSize.width, self.bounds.size.height / 2)];
}
[self stopAnimating];
[self beginAnimating];
}
- (void)setNumberOfDots:(NSUInteger)numberOfDots
{
_numberOfDots = numberOfDots;
[self invalidateIntrinsicContentSize];
[self stopAnimating];
[self beginAnimating];
}
- (void)setDotSize:(CGSize)dotSize
{
_dotSize = dotSize;
[self invalidateIntrinsicContentSize];
[self stopAnimating];
[self beginAnimating];
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
for (M13ProgressViewMetroDot *dot in dots) {
[dot performAction:action animated:animated];
}
}
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self showProgress];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self showProgress];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self showProgress];
});
}
- (void)showProgress
{
static int pastIndexToHighlightTo = 0;
int indexToHighlightTo = ceilf(_numberOfDots * self.progress);
//Only perform the animation if necessary.
if (pastIndexToHighlightTo != indexToHighlightTo) {
for (int i = 0; i < _numberOfDots; i++) {
M13ProgressViewMetroDot *dot = dots[i];
if (i <= indexToHighlightTo && self.progress != 0) {
dot.highlighted = YES;
} else {
dot.highlighted = NO;
}
}
pastIndexToHighlightTo = indexToHighlightTo;
}
}
- (CGSize)intrinsicContentSize
{
//No real constraint on size.
if (_animationShape == M13ProgressViewMetroAnimationShapeEllipse || _animationShape == M13ProgressViewMetroAnimationShapeRectangle) {
return CGSizeMake(3 * _dotSize.width, 3 * _dotSize.height);
} else {
return CGSizeMake(_dotSize.width * _numberOfDots, _dotSize.height);
}
}
#pragma mark Animation
-(void)beginAnimating
{
if (!animating){
animating = YES;
currentNumberOfDots = 0;
dots = [[NSMutableArray alloc] init];
//add circles
animationTimer = [NSTimer scheduledTimerWithTimeInterval: 0.20 target: self
selector: @selector(createCircle) userInfo: nil repeats: YES];
}
}
-(void)createCircle
{
if (currentNumberOfDots<_numberOfDots){
currentNumberOfDots ++;
CGRect f;
if (_animationShape != M13ProgressViewMetroAnimationShapeLine) {
f = CGRectMake((self.frame.size.width - _dotSize.width) / 2 - 1, self.frame.size.height - _dotSize.height - 1, _dotSize.width, _dotSize.height);
} else {
f = CGRectMake(- _dotSize.width, self.bounds.size.height / 2, _dotSize.width, _dotSize.height);
}
M13ProgressViewMetroDot *dotLayer = [_metroDot copy];
dotLayer.frame = f;
[self.layer addSublayer:dotLayer];
[dots addObject:dotLayer];
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
animation.duration = self.animationDuration;
animation.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.15f :0.60f :0.85f :0.4f];
[animation setCalculationMode:kCAAnimationPaced];
animation.path = animationPath.CGPath;
animation.repeatCount = HUGE_VALF;
if (_animationShape != M13ProgressViewMetroAnimationShapeLine) {
//No delay needed
[dotLayer addAnimation:animation forKey:@"metroAnimation"];
} else {
//Delay repeat
animation.repeatCount = 1;
CAAnimationGroup *group = [CAAnimationGroup animation];
group.duration = self.animationDuration * 2;
group.animations = @[animation];
group.repeatCount = HUGE_VALF;
[dotLayer addAnimation:group forKey:@"metroAnimation"];
}
} else {
[animationTimer invalidate];
}
}
-(void)stopAnimating
{
animating = NO;
[animationTimer invalidate];
for (CALayer *layer in dots) {
[layer removeAllAnimations];
[layer removeFromSuperlayer];
}
}
@end
@@ -1,21 +0,0 @@
//
// M13ProgressViewMetroDotShape.h
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 3/9/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "M13ProgressViewMetro.h"
/**A subclass of M13ProgressViewMetroDot.*/
@interface M13ProgressViewMetroDotPolygon : M13ProgressViewMetroDot
/**The number of sides the polygon has.
@note if set less than 3, the polygon will be a circle.*/
@property (nonatomic, assign) NSUInteger numberOfSides;
/**The radius of the polygon.*/
@property (nonatomic, assign) CGFloat radius;
@end
@@ -1,100 +0,0 @@
//
// M13ProgressViewMetroDotShape.m
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 3/9/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import "M13ProgressViewMetroDotPolygon.h"
@implementation M13ProgressViewMetroDotPolygon
{
CAShapeLayer *shapeLayer;
M13ProgressViewAction currentAction;
}
- (void)setNumberOfSides:(NSUInteger)numberOfSides
{
_numberOfSides = numberOfSides;
[self setNeedsDisplay];
}
- (void)setRadius:(CGFloat)radius
{
_radius = radius;
[self setNeedsDisplay];
}
- (NSArray *)verticies
{
if (_numberOfSides < 3) {
return nil;
} else {
NSMutableArray *pointsArray = [NSMutableArray array];
for (int i = 0; i < _numberOfSides; i++) {
CGPoint point = CGPointMake(_radius * cosf((2.0 * M_PI * (float)i) / (float)_numberOfSides), _radius * sinf((2.0 * M_PI * (float)i) / (float)_numberOfSides));
NSValue *value = [NSValue valueWithCGPoint:point];
[pointsArray addObject:value];
}
return pointsArray;
}
}
- (void)drawInContext:(CGContextRef)ctx
{
//Create and add the polygon layer if it does not exist
if (shapeLayer == nil) {
shapeLayer = [CAShapeLayer layer];
[self addSublayer:shapeLayer];
}
//Create the path for the polygon
UIBezierPath *path = [UIBezierPath bezierPath];
NSArray *verticies = [self verticies];
if (verticies == nil) {
//Draw circle
path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, _radius * 2, _radius * 2)];
} else {
[path moveToPoint:((NSValue *)verticies[0]).CGPointValue];
for (int i = 1; i < verticies.count; i++) {
[path addLineToPoint:((NSValue *)verticies[i]).CGPointValue];
}
[path closePath];
}
//Set the shape layer's path
shapeLayer.path = path.CGPath;
//Set the color of the polygon
shapeLayer.fillColor = self.secondaryColor.CGColor;
if (self.highlighted) {
shapeLayer.fillColor = self.primaryColor.CGColor;
}
if (currentAction == M13ProgressViewActionSuccess) {
shapeLayer.fillColor = self.successColor.CGColor;
} else if (currentAction == M13ProgressViewActionFailure) {
shapeLayer.fillColor = self.failureColor.CGColor;
}
//Draw
[super drawInContext:ctx];
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
currentAction = action;
[self setNeedsDisplay];
}
- (id)copy
{
M13ProgressViewMetroDotPolygon *dot = [[M13ProgressViewMetroDotPolygon alloc] init];
dot.primaryColor = self.primaryColor;
dot.secondaryColor = self.secondaryColor;
dot.successColor = self.successColor;
dot.failureColor = self.failureColor;
dot.numberOfSides = _numberOfSides;
dot.radius = _radius;
return dot;
}
@end
@@ -1,23 +0,0 @@
//
// M13ProgressViewPie.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
/**A progress view that shows progress with a pie chart.*/
@interface M13ProgressViewPie : M13ProgressView
/**@name Appearance*/
/**The thickness of the border around the pie.*/
@property (nonatomic, assign) CGFloat backgroundRingWidth;
@end
-510
View File
@@ -1,510 +0,0 @@
//
// M13ProgressViewPie.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewPie.h"
@interface M13ProgressViewPie ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**Allow us to write to the progress.*/
@property (nonatomic, readwrite) CGFloat progress;
/**The layer that progress is shown on.*/
@property (nonatomic, retain) CAShapeLayer *progressLayer;
/**The layer that the background and indeterminate progress is shown on.*/
@property (nonatomic, retain) CAShapeLayer *backgroundLayer;
/**The layer that is used to render icons for success or failure.*/
@property (nonatomic, retain) CAShapeLayer *iconLayer;
/**The layer that is used to display the indeterminate view.*/
@property (nonatomic, retain) CAShapeLayer *indeterminateLayer;
/**The action currently being performed.*/
@property (nonatomic, assign) M13ProgressViewAction currentAction;
@end
#define kM13ProgressViewPieHideKey @"Hide"
#define kM13ProgressViewPieShowKey @"Show"
@implementation M13ProgressViewPie
{
//Wether or not the corresponding values have been overriden by the user
BOOL _backgroundRingWidthOverriden;
}
@dynamic progress;
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defaut sizes
_backgroundRingWidthOverriden = NO;
_backgroundRingWidth = fmaxf(self.bounds.size.width * .025, 1.0);
self.animationDuration = .3;
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = self.primaryColor;
//Set up the background layer
_backgroundLayer = [CAShapeLayer layer];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
_backgroundLayer.fillColor = [UIColor clearColor].CGColor;
_backgroundLayer.lineCap = kCALineCapRound;
_backgroundLayer.lineWidth = _backgroundRingWidth;
[self.layer addSublayer:_backgroundLayer];
//Set up the progress layer
_progressLayer = [CAShapeLayer layer];
_progressLayer.fillColor = self.primaryColor.CGColor;
_progressLayer.backgroundColor = [UIColor clearColor].CGColor;
[self.layer addSublayer:_progressLayer];
//Set the indeterminate layer
_indeterminateLayer = [CAShapeLayer layer];
_indeterminateLayer.fillColor = self.primaryColor.CGColor;
_indeterminateLayer.opacity = 0;
[self.layer addSublayer:_indeterminateLayer];
//Set up the icon layer
_iconLayer = [CAShapeLayer layer];
_iconLayer.fillColor = self.primaryColor.CGColor;
_iconLayer.fillRule = kCAFillRuleNonZero;
[self.layer addSublayer:_iconLayer];
}
#pragma mark Appearance
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
_progressLayer.strokeColor = self.primaryColor.CGColor;
_progressLayer.fillColor = self.primaryColor.CGColor;
_iconLayer.fillColor = self.primaryColor.CGColor;
_indeterminateLayer.fillColor = self.primaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setBackgroundRingWidth:(CGFloat)backgroundRingWidth
{
_backgroundRingWidth = backgroundRingWidth;
_backgroundLayer.lineWidth = _backgroundRingWidth;
_backgroundRingWidthOverriden = YES;
[self setNeedsDisplay];
[self invalidateIntrinsicContentSize];
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (self.progress == progress) {
return;
}
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:animated];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
if (action == M13ProgressViewActionNone && _currentAction != M13ProgressViewActionNone) {
//Animate
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
if (self.indeterminate) {
[_indeterminateLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
} else {
[_progressLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
}
[CATransaction commit];
_currentAction = action;
} else if (action == M13ProgressViewActionSuccess && _currentAction != M13ProgressViewActionSuccess) {
if (_currentAction == M13ProgressViewActionNone) {
_currentAction = action;
//Just show the icon layer
[self drawIcon];
//Animate
[CATransaction begin];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
if (self.indeterminate) {
[_indeterminateLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
} else {
[_progressLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
}
[CATransaction commit];
} else if (_currentAction == M13ProgressViewActionFailure) {
//Hide the icon layer before showing
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
[CATransaction setCompletionBlock:^{
_currentAction = action;
[self drawIcon];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
}];
[CATransaction commit];
}
} else if (action == M13ProgressViewActionFailure && _currentAction != M13ProgressViewActionFailure) {
if (_currentAction == M13ProgressViewActionNone) {
//Just show the icon layer
_currentAction = action;
[self drawIcon];
[CATransaction begin];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
if (self.indeterminate) {
[_indeterminateLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
} else {
[_progressLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
}
[CATransaction commit];
} else if (_currentAction == M13ProgressViewActionSuccess) {
//Hide the icon layer before showing
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
[CATransaction setCompletionBlock:^{
_currentAction = action;
[self drawIcon];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
}];
[CATransaction commit];
}
}
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
if (self.indeterminate == YES) {
//Draw the indeterminate circle
[self drawIndeterminate];
//Create the rotation animation
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0];
rotationAnimation.duration = 1;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = HUGE_VALF;
//Set the animations
[_indeterminateLayer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction begin];
[_progressLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
[_indeterminateLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
[CATransaction commit];
} else {
//Animate
[CATransaction begin];
[_progressLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewPieShowKey];
[_indeterminateLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewPieHideKey];
[CATransaction setCompletionBlock:^{
//Remove the rotation animation and reset the background
[_backgroundLayer removeAnimationForKey:@"rotationAnimation"];
[self drawBackground];
}];
[CATransaction commit];
}
}
- (CABasicAnimation *)showAnimation
{
//Show the progress layer and percentage
CABasicAnimation *showAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
showAnimation.fromValue = [NSNumber numberWithFloat:0.0];
showAnimation.toValue = [NSNumber numberWithFloat:1.0];
showAnimation.duration = self.animationDuration;
showAnimation.repeatCount = 1.0;
//Prevent the animation from resetting
showAnimation.fillMode = kCAFillModeForwards;
showAnimation.removedOnCompletion = NO;
return showAnimation;
}
- (CABasicAnimation *)hideAnimation
{
//Hide the progress layer and percentage
CABasicAnimation *hideAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
hideAnimation.fromValue = [NSNumber numberWithFloat:1.0];
hideAnimation.toValue = [NSNumber numberWithFloat:0.0];
hideAnimation.duration = self.animationDuration;
hideAnimation.repeatCount = 1.0;
//Prevent the animation from resetting
hideAnimation.fillMode = kCAFillModeForwards;
hideAnimation.removedOnCompletion = NO;
return hideAnimation;
}
#pragma mark Layout
- (void)layoutSubviews
{
//Update frames of layers
_backgroundLayer.frame = self.bounds;
_progressLayer.frame = self.bounds;
_iconLayer.frame = self.bounds;
_indeterminateLayer.frame = self.bounds;
//Update line widths if not overriden
if (!_backgroundRingWidthOverriden) {
_backgroundRingWidth = fmaxf(self.frame.size.width * .025, 1.0);
}
//Redraw
[self setNeedsDisplay];
}
- (CGSize)intrinsicContentSize
{
if (!_backgroundRingWidthOverriden) {
//Based on scale
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
} else {
return CGSizeMake(2 * _backgroundRingWidth, 2 * _backgroundRingWidth);
}
}
- (void)setFrame:(CGRect)frame
{
//Keep the progress view square.
if (frame.size.width != frame.size.height) {
frame.size.height = frame.size.width;
}
[super setFrame:frame];
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
//Draw the background
[self drawBackground];
//Draw Icons
[self drawIcon];
//Draw Progress
[self drawProgress];
}
- (void)drawSuccess
{
//Draw relative to a base size and percentage, that way the check can be drawn for any size.*/
CGFloat radius = (self.frame.size.width / 2.0);
CGFloat size = radius * .3;
//Create the path
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 0)];
[path addLineToPoint:CGPointMake(0, size * 2)];
[path addLineToPoint:CGPointMake(size * 3, size * 2)];
[path addLineToPoint:CGPointMake(size * 3, size)];
[path addLineToPoint:CGPointMake(size, size)];
[path addLineToPoint:CGPointMake(size, 0)];
[path closePath];
//Rotate it through -45 degrees...
[path applyTransform:CGAffineTransformMakeRotation(-M_PI_4)];
//Center it
[path applyTransform:CGAffineTransformMakeTranslation(radius * .46, 1.02 * radius)];
//Set path
[_iconLayer setPath:path.CGPath];
[_iconLayer setFillColor:self.primaryColor.CGColor];
}
- (void)drawFailure
{
//Calculate the size of the X
CGFloat radius = self.frame.size.width / 2.0;
CGFloat size = radius * .3;
//Create the path for the X
UIBezierPath *xPath = [UIBezierPath bezierPath];
[xPath moveToPoint:CGPointMake(size, 0)];
[xPath addLineToPoint:CGPointMake(2 * size, 0)];
[xPath addLineToPoint:CGPointMake(2 * size, size)];
[xPath addLineToPoint:CGPointMake(3 * size, size)];
[xPath addLineToPoint:CGPointMake(3 * size, 2 * size)];
[xPath addLineToPoint:CGPointMake(2 * size, 2 * size)];
[xPath addLineToPoint:CGPointMake(2 * size, 3 * size)];
[xPath addLineToPoint:CGPointMake(size, 3 * size)];
[xPath addLineToPoint:CGPointMake(size, 2 * size)];
[xPath addLineToPoint:CGPointMake(0, 2 * size)];
[xPath addLineToPoint:CGPointMake(0, size)];
[xPath addLineToPoint:CGPointMake(size, size)];
[xPath closePath];
//Center it
[xPath applyTransform:CGAffineTransformMakeTranslation(radius - (1.5 * size), radius - (1.5 * size))];
//Rotate path
[xPath applyTransform:CGAffineTransformMake(cos(M_PI_4),sin(M_PI_4),-sin(M_PI_4),cos(M_PI_4),radius * (1 - cos(M_PI_4)+ sin(M_PI_4)),radius * (1 - sin(M_PI_4)- cos(M_PI_4)))];
//Set path and fill color
[_iconLayer setPath:xPath.CGPath];
[_iconLayer setFillColor:self.primaryColor.CGColor];
}
- (void)drawBackground
{
//Create parameters to draw background
float startAngle = - M_PI_2;
float endAngle = startAngle + (2.0 * M_PI);
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.width / 2.0);
CGFloat radius = (self.bounds.size.width - _backgroundRingWidth) / 2.0;
//Draw path
UIBezierPath *path = [UIBezierPath bezierPath];
path.lineWidth = _backgroundRingWidth;
path.lineCapStyle = kCGLineCapRound;
[path addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
//Set the path
_backgroundLayer.path = path.CGPath;
}
- (void)drawProgress
{
//Create parameters to draw progress
float startAngle = - M_PI_2;
float endAngle = startAngle + (2.0 * M_PI * self.progress);
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.width / 2.0);
CGFloat radius = (self.bounds.size.width - _backgroundRingWidth) / 2.0;
//Draw path
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.height / 2.0)];
[path addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
[path closePath];
//Set the path
[_progressLayer setPath:path.CGPath];
}
- (void)drawIcon
{
if (_currentAction == M13ProgressViewActionSuccess) {
[self drawSuccess];
} else if (_currentAction == M13ProgressViewActionFailure) {
[self drawFailure];
} else if (_currentAction == M13ProgressViewActionNone) {
//Clear layer
_iconLayer.path = nil;
}
}
- (void)drawIndeterminate
{
//Create parameters to draw progress
float startAngle = - M_PI_2;
float endAngle = startAngle + (2.0 * M_PI * .2);
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.width / 2.0);
CGFloat radius = (self.bounds.size.width - _backgroundRingWidth) / 2.0;
//Draw path
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.height / 2.0)];
[path addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
[path closePath];
//Set the path
[_indeterminateLayer setPath:path.CGPath];
}
@end
@@ -1,35 +0,0 @@
//
// M13ProgressViewRadiative.h
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 3/13/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewRadiativeShapeCircle,
M13ProgressViewRadiativeShapeSquare
} M13ProgressViewRadiativeShape;
/**A progress view that displays progress via "Radiative" rings around a central point.*/
@interface M13ProgressViewRadiative : M13ProgressView
/**@name Appearance*/
/**The point where the wave fronts originate from. The point is defined in percentages, top left being {0, 0}, and the bottom right being {1, 1}.*/
@property (nonatomic, assign) CGPoint originationPoint;
/**The distance of the last ripple from the origination point.*/
@property (nonatomic, assign) CGFloat ripplesRadius;
/**The width of the ripples.*/
@property (nonatomic, assign) CGFloat rippleWidth;
/**The shape of the radiative ripples*/
@property (nonatomic, assign) M13ProgressViewRadiativeShape shape;
/**The number of ripples the progress view displays.*/
@property (nonatomic, assign) NSUInteger numberOfRipples;
/**The number of ripples the indeterminate pulse animation is.*/
@property (nonatomic, assign) NSUInteger pulseWidth;
/**The direction of the progress. If set to yes, the progress will be outward, of set to no, it will be inwards.*/
@property (nonatomic, assign) BOOL progressOutwards;
@end
@@ -1,271 +0,0 @@
//
// M13ProgressViewRadiative.m
// M13ProgressSuite
//
// Created by Brandon McQuilkin on 3/13/14.
// Copyright (c) 2014 Brandon McQuilkin. All rights reserved.
//
#import "M13ProgressViewRadiative.h"
#import <QuartzCore/QuartzCore.h>
@interface M13ProgressViewRadiative ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
@end
@implementation M13ProgressViewRadiative
{
NSMutableArray *ripplePaths;
}
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
self.clipsToBounds = YES;
//Set defauts
self.animationDuration = 1.0;
_originationPoint = CGPointMake(0.5, 0.5);
self.numberOfRipples = 10;
self.shape = M13ProgressViewRadiativeShapeCircle;
_rippleWidth = 1.0;
_ripplesRadius = 20;
_pulseWidth = 5;
_progressOutwards = YES;
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
}
#pragma mark Setters
- (void)setOriginationPoint:(CGPoint)originationPoint
{
_originationPoint = originationPoint;
[self setNeedsLayout];
[self setNeedsDisplay];
}
- (void)setRipplesRadius:(CGFloat)ripplesRadius
{
_ripplesRadius = ripplesRadius;
[self setNeedsLayout];
[self setNeedsDisplay];
}
- (void)setNumberOfRipples:(NSUInteger)numberOfRipples
{
_numberOfRipples = numberOfRipples;
[self setNeedsLayout];
[self setNeedsDisplay];
}
- (void)setRippleWidth:(CGFloat)rippleWidth
{
_rippleWidth = rippleWidth;
for (UIBezierPath *path in ripplePaths) {
path.lineWidth = _rippleWidth;
}
[self setIndeterminate:self.indeterminate];
}
- (void)setShape:(M13ProgressViewRadiativeShape)shape
{
_shape = shape;
[self setNeedsLayout];
[self setNeedsDisplay];
}
- (void)setPulseWidth:(NSUInteger)pulseWidth
{
_pulseWidth = pulseWidth;
self.indeterminate = self.indeterminate;
}
- (void)setProgressOutwards:(BOOL)progressOutwards
{
_progressOutwards = progressOutwards;
[self setNeedsDisplay];
}
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
[self setNeedsDisplay];
}
#pragma mark animations
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
//Need animation
}
#pragma mark Layout
- (void)layoutSubviews
{
[super layoutSubviews];
//Create the paths to draw the ripples
ripplePaths = [NSMutableArray array];
for (int i = 0; i < _numberOfRipples - 1; i++) {
if (_shape == M13ProgressViewRadiativeShapeCircle) {
//If circular
UIBezierPath *path = [UIBezierPath bezierPath];
//Calculate the radius
CGFloat radius = _ripplesRadius * ((float)i / (float)(_numberOfRipples - 1));
//Draw the arc
[path moveToPoint:CGPointMake((_originationPoint.x * self.bounds.size.width)+ radius, _originationPoint.y * self.bounds.size.height)];
[path addArcWithCenter:CGPointMake(self.bounds.size.width * _originationPoint.x, self.bounds.size.height * _originationPoint.y) radius:radius startAngle:0.0 endAngle:(2 * M_PI) clockwise:YES];
//Set the width
path.lineWidth = _rippleWidth;
[ripplePaths addObject:path];
} else if (_shape == M13ProgressViewRadiativeShapeSquare) {
//If square
CGFloat radius = _ripplesRadius * ((float)i / (float)(_numberOfRipples - 1));
CGFloat delta = radius * (1 / sqrtf(2));
UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake((_originationPoint.x * self.bounds.size.width) - delta, (_originationPoint.y * self.bounds.size.height) - delta, delta * 2, delta * 2)];
path.lineWidth = _rippleWidth;
[ripplePaths addObject:path];
}
}
}
- (CGSize)intrinsicContentSize
{
//The width and height should be set with constraints. Can't think of a good way to figure out the minimum size with the point and scale based size calculations.
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
//Get the current context
CGContextRef context = UIGraphicsGetCurrentContext();
//For each of the paths draw it in the view.
NSEnumerator *enumerator;
if (_progressOutwards) {
enumerator = [ripplePaths objectEnumerator];
} else {
enumerator = [ripplePaths reverseObjectEnumerator];
}
UIBezierPath *path;
int i = 0;
int indexOfLastFilledPath = ceilf(self.progress * (float)_numberOfRipples);
while ((path = [enumerator nextObject])) {
//Set the path's color
if (!self.indeterminate) {
//Show progress
if (i <= indexOfLastFilledPath && self.progress != 0) {
//Highlighted
CGContextSetStrokeColorWithColor(context, self.primaryColor.CGColor);
CGContextAddPath(context, path.CGPath);
CGContextStrokePath(context);
} else {
//Not highlighted
CGContextSetStrokeColorWithColor(context, self.secondaryColor.CGColor);
CGContextAddPath(context, path.CGPath);
CGContextStrokePath(context);
}
i++;
} else {
//Indeterminate
}
}
}
@end
@@ -1,28 +0,0 @@
//
// M13ProgressViewRing.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
/**A progress view stylized similarly to the iOS 7 App store progress view.*/
@interface M13ProgressViewRing : M13ProgressView
/**@name Appearance*/
/**The width of the background ring in points.*/
@property (nonatomic, assign) CGFloat backgroundRingWidth;
/**The width of the progress ring in points.*/
@property (nonatomic, assign) CGFloat progressRingWidth;
/**@name Percentage*/
/**Wether or not to display a percentage inside the ring.*/
@property (nonatomic, assign) BOOL showPercentage;
@end
-518
View File
@@ -1,518 +0,0 @@
//
// M13ProgressViewRing.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewRing.h"
#import <CoreGraphics/CoreGraphics.h>
@interface M13ProgressViewRing ()
/**The number formatter to display the progress percentage.*/
@property (nonatomic, retain) NSNumberFormatter *percentageFormatter;
/**The label that shows the percentage.*/
@property (nonatomic, retain) UILabel *percentageLabel;
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**The layer that progress is shown on.*/
@property (nonatomic, retain) CAShapeLayer *progressLayer;
/**The layer that the background and indeterminate progress is shown on.*/
@property (nonatomic, retain) CAShapeLayer *backgroundLayer;
/**The layer that is used to render icons for success or failure.*/
@property (nonatomic, retain) CAShapeLayer *iconLayer;
/**The action currently being performed.*/
@property (nonatomic, assign) M13ProgressViewAction currentAction;
@end
#define kM13ProgressViewRingHideKey @"Hide"
#define kM13ProgressViewRingShowKey @"Show"
@implementation M13ProgressViewRing
{
//Wether or not the corresponding values have been overriden by the user
BOOL _backgroundRingWidthOverriden;
BOOL _progressRingWidthOverriden;
}
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defaut sizes
_backgroundRingWidth = fmaxf(self.bounds.size.width * .025, 1.0);
_progressRingWidth = 3 * _backgroundRingWidth;
_progressRingWidthOverriden = NO;
_backgroundRingWidthOverriden = NO;
self.animationDuration = .3;
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = self.primaryColor;
//Set up the number formatter
_percentageFormatter = [[NSNumberFormatter alloc] init];
_percentageFormatter.numberStyle = NSNumberFormatterPercentStyle;
//Set up the background layer
_backgroundLayer = [CAShapeLayer layer];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
_backgroundLayer.fillColor = [UIColor clearColor].CGColor;
_backgroundLayer.lineCap = kCALineCapRound;
_backgroundLayer.lineWidth = _backgroundRingWidth;
[self.layer addSublayer:_backgroundLayer];
//Set up the progress layer
_progressLayer = [CAShapeLayer layer];
_progressLayer.strokeColor = self.primaryColor.CGColor;
_progressLayer.fillColor = nil;
_progressLayer.lineCap = kCALineCapButt;
_progressLayer.lineWidth = _progressRingWidth;
[self.layer addSublayer:_progressLayer];
//Set up the icon layer
_iconLayer = [CAShapeLayer layer];
_iconLayer.fillColor = self.primaryColor.CGColor;
_iconLayer.fillRule = kCAFillRuleNonZero;
[self.layer addSublayer:_iconLayer];
//Set the label
_percentageLabel = [[UILabel alloc] init];
_percentageLabel.textAlignment = NSTextAlignmentCenter;
_percentageLabel.contentMode = UIViewContentModeCenter;
_percentageLabel.frame = self.bounds;
[self addSubview:_percentageLabel];
}
#pragma mark Appearance
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
_progressLayer.strokeColor = self.primaryColor.CGColor;
_iconLayer.fillColor = self.primaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setBackgroundRingWidth:(CGFloat)backgroundRingWidth
{
_backgroundRingWidth = backgroundRingWidth;
_backgroundLayer.lineWidth = _backgroundRingWidth;
_backgroundRingWidthOverriden = YES;
[self setNeedsDisplay];
}
- (void)setProgressRingWidth:(CGFloat)progressRingWidth
{
_progressRingWidth = progressRingWidth;
_progressLayer.lineWidth = _progressRingWidth;
_progressRingWidthOverriden = YES;
[self setNeedsDisplay];
}
- (void)setShowPercentage:(BOOL)showPercentage
{
_showPercentage = showPercentage;
if (_showPercentage == YES) {
if (_percentageLabel.superview == nil) {
//Show the label if not already
[self addSubview:_percentageLabel];
[self setNeedsLayout];
}
} else {
if (_percentageLabel.superview != nil) {
//Hide the label if not already
[_percentageLabel removeFromSuperview];
}
}
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (self.progress == progress) {
return;
}
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:animated];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
if (action == M13ProgressViewActionNone && _currentAction != M13ProgressViewActionNone) {
//Animate
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewRingHideKey];
[_percentageLabel.layer addAnimation:[self showAnimation] forKey:kM13ProgressViewRingShowKey];
[CATransaction commit];
_currentAction = action;
} else if (action == M13ProgressViewActionSuccess && _currentAction != M13ProgressViewActionSuccess) {
if (_currentAction == M13ProgressViewActionNone) {
_currentAction = action;
//Just show the icon layer
[self drawIcon];
//Animate
[CATransaction begin];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewRingShowKey];
[_percentageLabel.layer addAnimation:[self hideAnimation] forKey:kM13ProgressViewRingHideKey];
[CATransaction commit];
} else if (_currentAction == M13ProgressViewActionFailure) {
//Hide the icon layer before showing
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewRingHideKey];
[CATransaction setCompletionBlock:^{
_currentAction = action;
[self drawIcon];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewRingShowKey];
}];
[CATransaction commit];
}
} else if (action == M13ProgressViewActionFailure && _currentAction != M13ProgressViewActionFailure) {
if (_currentAction == M13ProgressViewActionNone) {
//Just show the icon layer
_currentAction = action;
[self drawIcon];
[CATransaction begin];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewRingShowKey];
[_percentageLabel.layer addAnimation:[self hideAnimation] forKey:kM13ProgressViewRingHideKey];
[CATransaction commit];
} else if (_currentAction == M13ProgressViewActionSuccess) {
//Hide the icon layer before showing
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewRingHideKey];
[CATransaction setCompletionBlock:^{
_currentAction = action;
[self drawIcon];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewRingShowKey];
}];
[CATransaction commit];
}
}
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
if (self.indeterminate == YES) {
//Draw the indeterminate circle
[self drawBackground];
//Create the rotation animation
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0];
rotationAnimation.duration = 1;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = HUGE_VALF;
//Set the animations
[_backgroundLayer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction begin];
[_progressLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewRingHideKey];
[_percentageLabel.layer addAnimation:[self hideAnimation] forKey:kM13ProgressViewRingHideKey];
[CATransaction commit];
} else {
//Animate
[CATransaction begin];
[_progressLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewRingShowKey];
[_percentageLabel.layer addAnimation:[self showAnimation] forKey:kM13ProgressViewRingShowKey];
[CATransaction setCompletionBlock:^{
//Remove the rotation animation and reset the background
[_backgroundLayer removeAnimationForKey:@"rotationAnimation"];
[self drawBackground];
}];
[CATransaction commit];
}
}
- (CABasicAnimation *)showAnimation
{
//Show the progress layer and percentage
CABasicAnimation *showAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
showAnimation.fromValue = [NSNumber numberWithFloat:0.0];
showAnimation.toValue = [NSNumber numberWithFloat:1.0];
showAnimation.duration = self.animationDuration;
showAnimation.repeatCount = 1.0;
//Prevent the animation from resetting
showAnimation.fillMode = kCAFillModeForwards;
showAnimation.removedOnCompletion = NO;
return showAnimation;
}
- (CABasicAnimation *)hideAnimation
{
//Hide the progress layer and percentage
CABasicAnimation *hideAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
hideAnimation.fromValue = [NSNumber numberWithFloat:1.0];
hideAnimation.toValue = [NSNumber numberWithFloat:0.0];
hideAnimation.duration = self.animationDuration;
hideAnimation.repeatCount = 1.0;
//Prevent the animation from resetting
hideAnimation.fillMode = kCAFillModeForwards;
hideAnimation.removedOnCompletion = NO;
return hideAnimation;
}
#pragma mark Layout
- (void)layoutSubviews
{
//Update frames of layers
_backgroundLayer.frame = self.bounds;
_progressLayer.frame = self.bounds;
_iconLayer.frame = self.bounds;
_percentageLabel.frame = self.bounds;
//Update font size
_percentageLabel.font = [UIFont systemFontOfSize:(self.bounds.size.width / 5)];
_percentageLabel.textColor = self.primaryColor;
//Update line widths if not overriden
if (!_backgroundRingWidthOverriden) {
_backgroundRingWidth = fmaxf(self.frame.size.width * .025, 1.0);
}
if (!_progressRingWidthOverriden) {
_progressRingWidth = _backgroundRingWidth * 3;
}
//Redraw
[self setNeedsDisplay];
}
- (void)setFrame:(CGRect)frame
{
//Keep the progress view square.
if (frame.size.width != frame.size.height) {
frame.size.height = frame.size.width;
}
[super setFrame:frame];
}
- (CGSize)intrinsicContentSize
{
//This progress view scales
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
//Draw the background
[self drawBackground];
//Draw Icons
[self drawIcon];
//Draw Progress
[self drawProgress];
}
- (void)drawSuccess
{
//Draw relative to a base size and percentage, that way the check can be drawn for any size.*/
CGFloat radius = (self.frame.size.width / 2.0);
CGFloat size = radius * .3;
//Create the path
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 0)];
[path addLineToPoint:CGPointMake(0, size * 2)];
[path addLineToPoint:CGPointMake(size * 3, size * 2)];
[path addLineToPoint:CGPointMake(size * 3, size)];
[path addLineToPoint:CGPointMake(size, size)];
[path addLineToPoint:CGPointMake(size, 0)];
[path closePath];
//Rotate it through -45 degrees...
[path applyTransform:CGAffineTransformMakeRotation(-M_PI_4)];
//Center it
[path applyTransform:CGAffineTransformMakeTranslation(radius * .46, 1.02 * radius)];
//Set path
[_iconLayer setPath:path.CGPath];
[_iconLayer setFillColor:self.primaryColor.CGColor];
}
- (void)drawFailure
{
//Calculate the size of the X
CGFloat radius = self.frame.size.width / 2.0;
CGFloat size = radius * .3;
//Create the path for the X
UIBezierPath *xPath = [UIBezierPath bezierPath];
[xPath moveToPoint:CGPointMake(size, 0)];
[xPath addLineToPoint:CGPointMake(2 * size, 0)];
[xPath addLineToPoint:CGPointMake(2 * size, size)];
[xPath addLineToPoint:CGPointMake(3 * size, size)];
[xPath addLineToPoint:CGPointMake(3 * size, 2 * size)];
[xPath addLineToPoint:CGPointMake(2 * size, 2 * size)];
[xPath addLineToPoint:CGPointMake(2 * size, 3 * size)];
[xPath addLineToPoint:CGPointMake(size, 3 * size)];
[xPath addLineToPoint:CGPointMake(size, 2 * size)];
[xPath addLineToPoint:CGPointMake(0, 2 * size)];
[xPath addLineToPoint:CGPointMake(0, size)];
[xPath addLineToPoint:CGPointMake(size, size)];
[xPath closePath];
//Center it
[xPath applyTransform:CGAffineTransformMakeTranslation(radius - (1.5 * size), radius - (1.5 * size))];
//Rotate path
[xPath applyTransform:CGAffineTransformMake(cos(M_PI_4),sin(M_PI_4),-sin(M_PI_4),cos(M_PI_4),radius * (1 - cos(M_PI_4)+ sin(M_PI_4)),radius * (1 - sin(M_PI_4)- cos(M_PI_4)))];
//Set path and fill color
[_iconLayer setPath:xPath.CGPath];
[_iconLayer setFillColor:self.primaryColor.CGColor];
}
- (void)drawBackground
{
//Create parameters to draw background
float startAngle = - M_PI_2;
float endAngle = startAngle + (2.0 * M_PI);
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.width / 2.0);
CGFloat radius = (self.bounds.size.width - _backgroundRingWidth) / 2.0;
//If indeterminate, recalculate the end angle
if (self.indeterminate) {
endAngle = .8 * endAngle;
}
//Draw path
UIBezierPath *path = [UIBezierPath bezierPath];
path.lineWidth = _progressRingWidth;
path.lineCapStyle = kCGLineCapRound;
[path addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
//Set the path
_backgroundLayer.path = path.CGPath;
}
- (void)drawProgress
{
//Create parameters to draw progress
float startAngle = - M_PI_2;
float endAngle = startAngle + (2.0 * M_PI * self.progress);
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.width / 2.0);
CGFloat radius = (self.bounds.size.width - _progressRingWidth) / 2.0;
//Draw path
UIBezierPath *path = [UIBezierPath bezierPath];
path.lineCapStyle = kCGLineCapButt;
path.lineWidth = _progressRingWidth;
[path addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
//Set the path
[_progressLayer setPath:path.CGPath];
//Update label
_percentageLabel.text = [_percentageFormatter stringFromNumber:[NSNumber numberWithFloat:self.progress]];
}
- (void)drawIcon
{
if (_currentAction == M13ProgressViewActionSuccess) {
[self drawSuccess];
} else if (_currentAction == M13ProgressViewActionFailure) {
[self drawFailure];
} else if (_currentAction == M13ProgressViewActionNone) {
//Clear layer
_iconLayer.path = nil;
}
}
@end
@@ -1,56 +0,0 @@
//
// M13ProgressViewSegmentedBar.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewSegmentedBarProgressDirectionLeftToRight,
M13ProgressViewSegmentedBarProgressDirectionBottomToTop,
M13ProgressViewSegmentedBarProgressDirectionRightToLeft,
M13ProgressViewSegmentedBarProgressDirectionTopToBottom
} M13ProgressViewSegmentedBarProgressDirection;
typedef enum {
M13ProgressViewSegmentedBarSegmentShapeRectangle,
M13ProgressViewSegmentedBarSegmentShapeRoundedRect,
M13ProgressViewSegmentedBarSegmentShapeCircle
} M13ProgressViewSegmentedBarSegmentShape;
/**A progress bar that shows progress with discrete values.*/
@interface M13ProgressViewSegmentedBar : M13ProgressView
/**@name Appearance*/
/**The direction of progress. (What direction the fill proceeds in.)*/
@property (nonatomic, assign) M13ProgressViewSegmentedBarProgressDirection progressDirection;
/**The shape of the segments.*/
@property (nonatomic, assign) M13ProgressViewSegmentedBarSegmentShape segmentShape;
/**The corner radius of the segment shape if the shape is set to M13ProgressViewSegmentedBarSegmentShapeRoundedRect.*/
@property (nonatomic, assign) CGFloat cornerRadius;
/**The number of segments to display in the progress view.*/
@property (nonatomic, assign) NSInteger numberOfSegments;
/**The separation between segments in points. Must be less than self.width / numberOfSegments.*/
@property (nonatomic, assign) CGFloat segmentSeparation;
/**@name Actions*/
/**The color the bar changes to for the success action.*/
@property (nonatomic, retain) UIColor *successColor;
/**The color the bar changes to for the failure action.*/
@property (nonatomic, retain) UIColor *failureColor;
/**The array of UIColors that the segments will be colored with.
@note Each index in the array coresponds to a single segment. If there are more indicies then segments, not all colors will be used. If there are less indicies than segments, the colors will be looped. If nil, then a solid fill will be used.*/
@property (nonatomic, retain) NSArray *primaryColors;
/**The array of UIColors that the segment's backgrounds will be colored with.
@note Each index in the array coresponds to a single segment. If there are more indicies then segments, not all colors will be used. If there are less indicies than segments, the colors will be looped. If nil, then a solid fill will be used.*/
@property (nonatomic, retain) NSArray *secondaryColors;
@end
@@ -1,549 +0,0 @@
//
// M13ProgressViewSegmentedBar.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewSegmentedBar.h"
@interface M13ProgressViewSegmentedBar ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**Allow us to write to the progress.*/
@property (nonatomic, readwrite) CGFloat progress;
/**The layer that progress is shown on.*/
@property (nonatomic, retain) CAShapeLayer *segmentsLayer;
/**The action currently being performed.*/
@property (nonatomic, assign) M13ProgressViewAction currentAction;
@end
@implementation M13ProgressViewSegmentedBar
{
NSInteger indeterminateIndex;
NSTimer *indeterminateTimer;
NSArray *segmentColorsPrimary;
NSArray *segmentColorsBackground;
}
@dynamic progress;
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
_successColor = [UIColor colorWithRed:63.0f/255.0f green:226.0f/255.0f blue:80.0f/255.0f alpha:1];
_failureColor = [UIColor colorWithRed:249.0f/255.0f green:37.0f/255.0f blue:0 alpha:1];
//ProgressLayer
_segmentsLayer = [CAShapeLayer layer];
_segmentsLayer.frame = self.bounds;
[self.layer addSublayer:_segmentsLayer];
//Set defauts
self.animationDuration = .3;
_progressDirection = M13ProgressViewSegmentedBarProgressDirectionLeftToRight;
self.numberOfSegments = 16;
_segmentSeparation = 10.0;
_cornerRadius = 2.0;
//Layout
[self layoutSubviews];
}
#pragma mark Appearance
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
[self resetColorsForSegments];
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
[self resetColorsForSegments];
[self setNeedsDisplay];
}
- (void)setSuccessColor:(UIColor *)successColor
{
_successColor = successColor;
[self setNeedsDisplay];
}
- (void)setFailureColor:(UIColor *)failureColor
{
_failureColor = failureColor;
[self setNeedsDisplay];
}
- (void)setProgressDirection:(M13ProgressViewSegmentedBarProgressDirection)progressDirection
{
_progressDirection = progressDirection;
[self layoutSubviews];
[self setNeedsDisplay];
}
- (void)setNumberOfSegments:(NSInteger)numberOfSegments
{
_numberOfSegments = numberOfSegments;
//First remove all the sub layers
_segmentsLayer.sublayers = nil;
//Then add sub layers equal to the number of segments
for (int i = 0; i < numberOfSegments; i++) {
CAShapeLayer *segment = [CAShapeLayer layer];
segment.frame = self.bounds;
[_segmentsLayer addSublayer:segment];
}
//Reset the colors for the segements
[self resetColorsForSegments];
[self setNeedsDisplay];
}
- (void)setSegmentSeparation:(CGFloat)segmentSeparation
{
_segmentSeparation = segmentSeparation;
[self setNeedsDisplay];
}
- (void)setSegmentShape:(M13ProgressViewSegmentedBarSegmentShape)segmentShape
{
_segmentShape = segmentShape;
[self setNeedsDisplay];
}
- (void)setPrimaryColors:(NSArray *)primaryColors
{
_primaryColors = primaryColors;
[self resetColorsForSegments];
}
- (void)setSecondaryColors:(NSArray *)secondaryColors
{
_secondaryColors = secondaryColors;
[self resetColorsForSegments];
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
if (action == M13ProgressViewActionNone && _currentAction != M13ProgressViewActionNone) {
_currentAction = action;
[self setNeedsDisplay];
[CATransaction begin];
for (int i = 0; i < _numberOfSegments; i++) {
CAShapeLayer *layer = _segmentsLayer.sublayers[i];
CABasicAnimation *barAnimation = [self barColorAnimation];
barAnimation.fromValue = (id)layer.fillColor;
barAnimation.toValue = (id)[self colorForSegment:i].CGColor;
[layer addAnimation:barAnimation forKey:@"fillColor"];
}
[CATransaction commit];
} else if (action == M13ProgressViewActionSuccess && _currentAction != M13ProgressViewActionSuccess) {
_currentAction = action;
[self setNeedsDisplay];
[CATransaction begin];
for (int i = 0; i < _numberOfSegments; i++) {
CAShapeLayer *layer = _segmentsLayer.sublayers[i];
CABasicAnimation *barAnimation = [self barColorAnimation];
barAnimation.fromValue = (id)layer.fillColor;
barAnimation.toValue = (id)_successColor.CGColor;
[layer addAnimation:barAnimation forKey:@"fillColor"];
}
[CATransaction commit];
} else if (action == M13ProgressViewActionFailure && _currentAction != M13ProgressViewActionFailure) {
_currentAction = action;
[self setNeedsDisplay];
[CATransaction begin];
for (int i = 0; i < _numberOfSegments; i++) {
CAShapeLayer *layer = _segmentsLayer.sublayers[i];
CABasicAnimation *barAnimation = [self barColorAnimation];
barAnimation.fromValue = (id)layer.fillColor;
barAnimation.toValue = (id)_failureColor.CGColor;
[layer addAnimation:barAnimation forKey:@"fillColor"];
}
[CATransaction commit];
}
}
- (CABasicAnimation *)barColorAnimation
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"fillColor"];
animation.duration = 2 * self.animationDuration;
animation.repeatCount = 1;
//Prevent the animation from resetting
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;
return animation;
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
if (indeterminate) {
indeterminateTimer = [NSTimer timerWithTimeInterval:(1.5 / (float)_numberOfSegments) target:self selector:@selector(drawIndeterminate) userInfo:Nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:indeterminateTimer forMode:NSRunLoopCommonModes];
} else {
[indeterminateTimer invalidate];
[self setNeedsDisplay];
}
}
#pragma mark Layout
- (void)layoutSubviews
{
[super layoutSubviews];
_segmentsLayer.frame = self.bounds;
for (CAShapeLayer *layer in _segmentsLayer.sublayers) {
layer.frame = self.bounds;
}
}
- (CGSize)intrinsicContentSize
{
return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric);
}
#pragma mark Drawing
- (void)resetColorsForSegments
{
if (_primaryColors == nil) {
NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:_numberOfSegments];
for (int i = 0; i < _numberOfSegments; i++) {
[tempArray addObject:self.primaryColor];
}
segmentColorsPrimary = tempArray.copy;
}
if (_numberOfSegments == _primaryColors.count) {
segmentColorsPrimary = _primaryColors;
}
if (_numberOfSegments != _primaryColors.count && _primaryColors.count != 0) {
NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:_numberOfSegments];
for (int i = 0; i < _numberOfSegments; i++) {
if (_numberOfSegments > _primaryColors.count) {
[tempArray addObject:_primaryColors[i]];
} else {
[tempArray addObject:_primaryColors[i % _primaryColors.count]];
}
}
segmentColorsPrimary = tempArray.copy;
}
if (_secondaryColors == nil) {
NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:_numberOfSegments];
for (int i = 0; i < _numberOfSegments; i++) {
[tempArray addObject:self.secondaryColor];
}
segmentColorsBackground = tempArray.copy;
}
if (_numberOfSegments == _secondaryColors.count) {
segmentColorsBackground = _secondaryColors;
}
if (_numberOfSegments != _secondaryColors.count && _secondaryColors.count != 0) {
NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:_numberOfSegments];
for (int i = 0; i < _numberOfSegments; i++) {
if (_numberOfSegments > _secondaryColors.count) {
[tempArray addObject:_secondaryColors[i]];
} else {
[tempArray addObject:_secondaryColors[i % _secondaryColors.count]];
}
}
segmentColorsBackground = tempArray.copy;
}
}
- (NSInteger)numberOfFullSegments
{
return (NSInteger)floorf(self.progress * _numberOfSegments);
}
- (UIColor *)colorForSegment:(NSUInteger)index
{
if (index < [self numberOfFullSegments]) {
return segmentColorsPrimary[index];
} else {
return segmentColorsBackground[index];
}
}
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
if (!self.indeterminate) {
[self drawProgress];
}
}
- (void)drawProgress
{
//Calculate the segment width (totalWidth - totalSeparationwidth / numberOfSegments
CGFloat segmentWidth = 0;
if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewSegmentedBarProgressDirectionRightToLeft) {
segmentWidth = (self.bounds.size.width - ((_numberOfSegments - 1) * _segmentSeparation)) / _numberOfSegments;
} else {
segmentWidth = (self.bounds.size.height - ((_numberOfSegments - 1) * _segmentSeparation)) / _numberOfSegments;
}
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
cornerRadius = _cornerRadius;
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
cornerRadius = floorf(self.bounds.size.height < segmentWidth ? self.bounds.size.height / 2.0 : segmentWidth / 2.0);
}
//Iterate through all the segments that are full.
for (int i = 0; i < _numberOfSegments; i++) {
UIBezierPath *path = [UIBezierPath bezierPath];
//Move to top left of rectangle
if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionLeftToRight) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(i * (segmentWidth + _segmentSeparation), 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(i * (segmentWidth + _segmentSeparation), 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake(i * (segmentWidth + _segmentSeparation), (self.bounds.size.height - (2 * cornerRadius)) / 2, 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
} else if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionRightToLeft) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(self.bounds.size.width - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(self.bounds.size.width - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake(self.bounds.size.width - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, (self.bounds.size.height - (2 * cornerRadius)) / 2, 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
} else if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionBottomToTop) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(0, self.bounds.size.height - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(0, self.bounds.size.height - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake((self.bounds.size.width - (2 * cornerRadius)) / 2, self.bounds.size.height - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
} else if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionTopToBottom) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(0, (i * (segmentWidth + _segmentSeparation)), self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(0, (i * (segmentWidth + _segmentSeparation)), self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake((self.bounds.size.width - (2 * cornerRadius)) / 2, (i * (segmentWidth + _segmentSeparation)), 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
}
//Add segment to the proper layer, and color it
CAShapeLayer *layer = _segmentsLayer.sublayers[i];
layer.path = path.CGPath;
layer.fillColor = [self colorForSegment:i].CGColor;
}
}
- (void)drawIndeterminate
{
//Calculate the segment width (totalWidth - totalSeparationwidth / numberOfSegments
CGFloat segmentWidth = 0;
if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionLeftToRight || _progressDirection == M13ProgressViewSegmentedBarProgressDirectionRightToLeft) {
segmentWidth = (self.bounds.size.width - ((_numberOfSegments - 1) * _segmentSeparation)) / _numberOfSegments;
} else {
segmentWidth = (self.bounds.size.height - ((_numberOfSegments - 1) * _segmentSeparation)) / _numberOfSegments;
}
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
cornerRadius = _cornerRadius;
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
cornerRadius = floorf(self.bounds.size.height < segmentWidth ? self.bounds.size.height / 2.0 : segmentWidth / 2.0);
}
//What index will the segments be colored from.
NSInteger numberOfSegmentsToBeColored = _numberOfSegments / 4;
//Iterate through all the segments that are full.
for (int i = 0; i < _numberOfSegments; i++) {
UIBezierPath *path = [UIBezierPath bezierPath];
//Move to top left of rectangle
if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionLeftToRight) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(i * (segmentWidth + _segmentSeparation), 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(i * (segmentWidth + _segmentSeparation), 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake(i * (segmentWidth + _segmentSeparation), (self.bounds.size.height - (2 * cornerRadius)) / 2, 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
} else if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionRightToLeft) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(self.bounds.size.width - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(self.bounds.size.width - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, 0, segmentWidth, self.bounds.size.height);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake(self.bounds.size.width - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, (self.bounds.size.height - (2 * cornerRadius)) / 2, 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
} else if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionBottomToTop) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(0, self.bounds.size.height - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(0, self.bounds.size.height - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake((self.bounds.size.width - (2 * cornerRadius)) / 2, self.bounds.size.height - (i * (segmentWidth + _segmentSeparation)) - segmentWidth, 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
} else if (_progressDirection == M13ProgressViewSegmentedBarProgressDirectionTopToBottom) {
if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRectangle) {
CGRect rect = CGRectMake(0, (i * (segmentWidth + _segmentSeparation)), self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRect:rect];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeRoundedRect) {
CGRect rect = CGRectMake(0, (i * (segmentWidth + _segmentSeparation)), self.bounds.size.width, segmentWidth);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
} else if (_segmentShape == M13ProgressViewSegmentedBarSegmentShapeCircle) {
CGRect rect = CGRectMake((self.bounds.size.width - (2 * cornerRadius)) / 2, (i * (segmentWidth + _segmentSeparation)), 2 * cornerRadius, 2 * cornerRadius);
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
}
}
//Add the segment to the proper path //Add segment to the proper layer, and color it
CAShapeLayer *layer = _segmentsLayer.sublayers[i];
layer.path = path.CGPath;
if (i >= indeterminateIndex && i < indeterminateIndex + numberOfSegmentsToBeColored) {
layer.fillColor = ((UIColor *)segmentColorsPrimary[i]).CGColor;
} else {
layer.fillColor = ((UIColor *)segmentColorsBackground[i]).CGColor;
}
}
//increase the index by one for movement
indeterminateIndex += 1;
if (indeterminateIndex == numberOfSegmentsToBeColored + _numberOfSegments) {
indeterminateIndex = -numberOfSegmentsToBeColored;
}
}
@end
@@ -1,38 +0,0 @@
//
// M13ProgressVewSegmentedRing.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
typedef enum {
M13ProgressViewSegmentedRingSegmentBoundaryTypeWedge,
M13ProgressViewSegmentedRingSegmentBoundaryTypeRectangle
} M13ProgressViewSegmentedRingSegmentBoundaryType;
#import "M13ProgressView.h"
/**Progress is shown by a ring split up into segments.*/
@interface M13ProgressViewSegmentedRing : M13ProgressView
/**@name Appearance*/
/**The width of the progress ring in points.*/
@property (nonatomic, assign) CGFloat progressRingWidth;
/**The number of segments to display in the progress view.*/
@property (nonatomic, assign) NSInteger numberOfSegments;
/**The angle of the separation between the segments in radians.*/
@property (nonatomic, assign) CGFloat segmentSeparationAngle;
/**The type of boundary between segments.*/
@property (nonatomic, assign) M13ProgressViewSegmentedRingSegmentBoundaryType segmentBoundaryType;
/**@name Percentage*/
/**Wether or not to display a percentage inside the ring.*/
@property (nonatomic, assign) BOOL showPercentage;
@end
@@ -1,603 +0,0 @@
//
// M13ProgressVewSegmentedRing.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewSegmentedRing.h"
@interface M13ProgressViewSegmentedRing ()
/**The number formatter to display the progress percentage.*/
@property (nonatomic, retain) NSNumberFormatter *percentageFormatter;
/**The label that shows the percentage.*/
@property (nonatomic, retain) UILabel *percentageLabel;
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**Allow us to write to the progress.*/
@property (nonatomic, readwrite) CGFloat progress;
/**The layer that progress is shown on.*/
@property (nonatomic, retain) CAShapeLayer *progressLayer;
/**The layer that the background shown on.*/
@property (nonatomic, retain) CAShapeLayer *backgroundLayer;
/**The layer that is used to render icons for success or failure.*/
@property (nonatomic, retain) CAShapeLayer *iconLayer;
/**The action currently being performed.*/
@property (nonatomic, assign) M13ProgressViewAction currentAction;
@end
#define kM13ProgressViewSegmentedRingHideKey @"Hide"
#define kM13ProgressViewSegmentedRingShowKey @"Show"
@implementation M13ProgressViewSegmentedRing
{
//Wether or not the corresponding values have been overriden by the user
BOOL _progressRingWidthOverriden;
BOOL _segmentSeparationAngleOverriden;
//The calculated angles of the concentric rings
CGFloat outerRingAngle;
CGFloat innerRingAngle;
CGFloat _segmentSeparationInnerAngle;
}
@dynamic progress;
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defaut sizes
_progressRingWidth = fmaxf(self.bounds.size.width * .25, 1.0);
_progressRingWidthOverriden = NO;
_segmentSeparationAngleOverriden = NO;
self.animationDuration = .3;
_showPercentage = YES;
_numberOfSegments = 8;
_segmentSeparationAngle = M_PI / (2 * _numberOfSegments);
_segmentBoundaryType = M13ProgressViewSegmentedRingSegmentBoundaryTypeWedge;
[self updateAngles];
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
//Set up the number formatter
_percentageFormatter = [[NSNumberFormatter alloc] init];
_percentageFormatter.numberStyle = NSNumberFormatterPercentStyle;
//Set up the background layer
_backgroundLayer = [CAShapeLayer layer];
_backgroundLayer.fillColor = self.secondaryColor.CGColor;
[self.layer addSublayer:_backgroundLayer];
//Set up the progress layer
_progressLayer = [CAShapeLayer layer];
_progressLayer.fillColor = self.primaryColor.CGColor;
[self.layer addSublayer:_progressLayer];
//Set up the icon layer
_iconLayer = [CAShapeLayer layer];
_iconLayer.fillColor = self.primaryColor.CGColor;
_iconLayer.fillRule = kCAFillRuleNonZero;
[self.layer addSublayer:_iconLayer];
//Set the label
_percentageLabel = [[UILabel alloc] init];
_percentageLabel.font = [UIFont systemFontOfSize:((self.bounds.size.width - _progressRingWidth) / 5)];
_percentageLabel.textColor = self.primaryColor;
_percentageLabel.textAlignment = NSTextAlignmentCenter;
_percentageLabel.contentMode = UIViewContentModeCenter;
_percentageLabel.frame = self.bounds;
[self addSubview:_percentageLabel];
}
#pragma mark Appearance
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
_progressLayer.strokeColor = [[UIColor clearColor] CGColor];
_progressLayer.fillColor = self.primaryColor.CGColor;
_iconLayer.fillColor = self.primaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setProgressRingWidth:(CGFloat)progressRingWidth
{
_progressRingWidth = progressRingWidth;
_progressLayer.lineWidth = _progressRingWidth;
_backgroundLayer.lineWidth = _progressRingWidth;
_progressRingWidthOverriden = YES;
[self updateAngles];
[self setNeedsDisplay];
[self invalidateIntrinsicContentSize];
}
- (void)setShowPercentage:(BOOL)showPercentage
{
_showPercentage = showPercentage;
if (_showPercentage == YES) {
if (_percentageLabel.superview == nil) {
//Show the label if not already
[self addSubview:_percentageLabel];
[self setNeedsLayout];
}
} else {
if (_percentageLabel.superview != nil) {
//Hide the label if not already
[_percentageLabel removeFromSuperview];
}
}
}
- (void)setSegmentBoundaryType:(M13ProgressViewSegmentedRingSegmentBoundaryType)segmentBoundaryType
{
_segmentBoundaryType = segmentBoundaryType;
[self setNeedsDisplay];
}
- (void)setNumberOfSegments:(NSInteger)numberOfSegments
{
_numberOfSegments = numberOfSegments;
if (!_segmentSeparationAngleOverriden) {
_segmentSeparationAngle = M_PI / (2 * _numberOfSegments);
}
}
- (void)setSegmentSeparationAngle:(CGFloat)segmentSeparationAngle
{
_segmentSeparationAngle = segmentSeparationAngle;
_segmentSeparationAngleOverriden = YES;
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (self.progress == progress) {
return;
}
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:animated];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
if (action == M13ProgressViewActionNone && _currentAction != M13ProgressViewActionNone) {
//Animate
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewSegmentedRingHideKey];
[_percentageLabel.layer addAnimation:[self showAnimation] forKey:kM13ProgressViewSegmentedRingShowKey];
[CATransaction commit];
_currentAction = action;
} else if (action == M13ProgressViewActionSuccess && _currentAction != M13ProgressViewActionSuccess) {
if (_currentAction == M13ProgressViewActionNone) {
_currentAction = action;
//Just show the icon layer
[self drawIcon];
//Animate
[CATransaction begin];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewSegmentedRingShowKey];
[_percentageLabel.layer addAnimation:[self hideAnimation] forKey:kM13ProgressViewSegmentedRingHideKey];
[CATransaction commit];
} else if (_currentAction == M13ProgressViewActionFailure) {
//Hide the icon layer before showing
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewSegmentedRingHideKey];
[CATransaction setCompletionBlock:^{
_currentAction = action;
[self drawIcon];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewSegmentedRingShowKey];
}];
[CATransaction commit];
}
} else if (action == M13ProgressViewActionFailure && _currentAction != M13ProgressViewActionFailure) {
if (_currentAction == M13ProgressViewActionNone) {
//Just show the icon layer
_currentAction = action;
[self drawIcon];
[CATransaction begin];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewSegmentedRingShowKey];
[_percentageLabel.layer addAnimation:[self hideAnimation] forKey:kM13ProgressViewSegmentedRingHideKey];
[CATransaction commit];
} else if (_currentAction == M13ProgressViewActionSuccess) {
//Hide the icon layer before showing
[CATransaction begin];
[_iconLayer addAnimation:[self hideAnimation] forKey:kM13ProgressViewSegmentedRingHideKey];
[CATransaction setCompletionBlock:^{
_currentAction = action;
[self drawIcon];
[_iconLayer addAnimation:[self showAnimation] forKey:kM13ProgressViewSegmentedRingShowKey];
}];
[CATransaction commit];
}
}
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
if (self.indeterminate == YES) {
//Create the rotation animation
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0];
rotationAnimation.duration = 5 * self.animationDuration;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = HUGE_VALF;
CABasicAnimation *rotationAnimationProgress = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimationProgress.toValue = [NSNumber numberWithFloat: M_PI * 2.0];
rotationAnimationProgress.duration = 5 * self.animationDuration;
rotationAnimationProgress.cumulative = YES;
rotationAnimationProgress.repeatCount = HUGE_VALF;
//Set the animations
[_backgroundLayer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[_progressLayer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction begin];
[_percentageLabel.layer addAnimation:[self hideAnimation] forKey:kM13ProgressViewSegmentedRingHideKey];
[CATransaction commit];
} else {
//Animate
[CATransaction begin];
[_percentageLabel.layer addAnimation:[self showAnimation] forKey:kM13ProgressViewSegmentedRingShowKey];
[CATransaction setCompletionBlock:^{
//Remove the rotation animation and reset the background
[_backgroundLayer removeAnimationForKey:@"rotationAnimation"];
[_progressLayer removeAnimationForKey:@"rotationAnimation"];
[self drawBackground];
[self drawProgress];
}];
[CATransaction commit];
}
}
- (CABasicAnimation *)showAnimation
{
//Show the progress layer and percentage
CABasicAnimation *showAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
showAnimation.fromValue = [NSNumber numberWithFloat:0.0];
showAnimation.toValue = [NSNumber numberWithFloat:1.0];
showAnimation.duration = self.animationDuration;
showAnimation.repeatCount = 1.0;
//Prevent the animation from resetting
showAnimation.fillMode = kCAFillModeForwards;
showAnimation.removedOnCompletion = NO;
return showAnimation;
}
- (CABasicAnimation *)hideAnimation
{
//Hide the progress layer and percentage
CABasicAnimation *hideAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
hideAnimation.fromValue = [NSNumber numberWithFloat:1.0];
hideAnimation.toValue = [NSNumber numberWithFloat:0.0];
hideAnimation.duration = self.animationDuration;
hideAnimation.repeatCount = 1.0;
//Prevent the animation from resetting
hideAnimation.fillMode = kCAFillModeForwards;
hideAnimation.removedOnCompletion = NO;
return hideAnimation;
}
#pragma mark Layout
- (void)layoutSubviews
{
//Update frames of layers
_backgroundLayer.frame = self.bounds;
_progressLayer.frame = self.bounds;
_iconLayer.frame = self.bounds;
//Update font size
_percentageLabel.font = [UIFont systemFontOfSize:((self.bounds.size.width - _progressRingWidth) / 5)];
//Update line widths if not overriden
if (!_progressRingWidthOverriden) {
_progressRingWidth = fmaxf(self.frame.size.width * .25, 1.0);
}
[self updateAngles];
//Redraw
[self setNeedsDisplay];
}
- (CGSize)intrinsicContentSize
{
//This might need a little more fine tuning.
CGFloat base = _progressRingWidth * 2;
return CGSizeMake(base, base);
}
- (void)setFrame:(CGRect)frame
{
//Keep the progress view square.
if (frame.size.width != frame.size.height) {
frame.size.height = frame.size.width;
}
[self updateAngles];
[super setFrame:frame];
}
- (void)updateAngles
{
//Calculate the outer ring angle for the progress segment.*/
outerRingAngle = ((2.0 * M_PI) / (float)_numberOfSegments) - _segmentSeparationAngle;
//Calculate the angle gap for the inner ring
_segmentSeparationInnerAngle = 2.0 * asinf(((self.bounds.size.width / 2.0) * sinf(_segmentSeparationAngle / 2.0)) / ((self.bounds.size.width / 2.0) - _progressRingWidth));
//Calculate the inner ring angle for the progress segment.*/
innerRingAngle = ((2.0 * M_PI) / (float)_numberOfSegments) - _segmentSeparationInnerAngle;
}
- (NSInteger)numberOfFullSegments
{
return (NSInteger)floorf(self.progress * _numberOfSegments);
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
//Draw the background
[self drawBackground];
//Draw Icons
[self drawIcon];
//Draw Progress
[self drawProgress];
}
- (void)drawSuccess
{
//Draw relative to a base size and percentage, that way the check can be drawn for any size.*/
CGFloat radius = (self.frame.size.width / 2.0);
CGFloat size = (radius - _progressRingWidth) * .3;
//Create the path
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0, 0)];
[path addLineToPoint:CGPointMake(0, size * 2)];
[path addLineToPoint:CGPointMake(size * 3, size * 2)];
[path addLineToPoint:CGPointMake(size * 3, size)];
[path addLineToPoint:CGPointMake(size, size)];
[path addLineToPoint:CGPointMake(size, 0)];
[path closePath];
//Rotate it through -45 degrees...
[path applyTransform:CGAffineTransformMakeRotation(-M_PI_4)];
//Center it
[path applyTransform:CGAffineTransformMakeTranslation((radius + _progressRingWidth ) * .50 , 1.02 * radius)];
//Set path
[_iconLayer setPath:path.CGPath];
[_iconLayer setFillColor:self.primaryColor.CGColor];
}
- (void)drawFailure
{
//Calculate the size of the X
CGFloat radius = (self.frame.size.width / 2.0);
CGFloat size = (radius - _progressRingWidth) * .3;
//Create the path for the X
UIBezierPath *xPath = [UIBezierPath bezierPath];
[xPath moveToPoint:CGPointMake(size, 0)];
[xPath addLineToPoint:CGPointMake(2 * size, 0)];
[xPath addLineToPoint:CGPointMake(2 * size, size)];
[xPath addLineToPoint:CGPointMake(3 * size, size)];
[xPath addLineToPoint:CGPointMake(3 * size, 2 * size)];
[xPath addLineToPoint:CGPointMake(2 * size, 2 * size)];
[xPath addLineToPoint:CGPointMake(2 * size, 3 * size)];
[xPath addLineToPoint:CGPointMake(size, 3 * size)];
[xPath addLineToPoint:CGPointMake(size, 2 * size)];
[xPath addLineToPoint:CGPointMake(0, 2 * size)];
[xPath addLineToPoint:CGPointMake(0, size)];
[xPath addLineToPoint:CGPointMake(size, size)];
[xPath closePath];
//Center it
[xPath applyTransform:CGAffineTransformMakeTranslation(radius - (1.5 * size), radius - (1.5 * size))];
//Rotate path
[xPath applyTransform:CGAffineTransformMake(cos(M_PI_4),sin(M_PI_4),-sin(M_PI_4),cos(M_PI_4),radius * (1 - cos(M_PI_4)+ sin(M_PI_4)),radius * (1 - sin(M_PI_4)- cos(M_PI_4)))];
//Set path and fill color
[_iconLayer setPath:xPath.CGPath];
[_iconLayer setFillColor:self.primaryColor.CGColor];
}
- (void)drawBackground
{
//Create parameters to draw background
//The background segments are drawn counterclockwise, start with the outer ring, add an arc counterclockwise. Then add the coresponding arc for the inner ring clockwise. Then close the path. The line connecting the two arcs is not needed. From tests it seems to be created automatically.
CGFloat outerStartAngle = - M_PI_2;
//Skip half of a separation angle, since the first separation will be centered upward.
outerStartAngle -= (_segmentSeparationAngle / 2.0);
//Calculate the inner start angle position
CGFloat innerStartAngle = - M_PI_2;
innerStartAngle -= (_segmentSeparationInnerAngle / 2.0) + innerRingAngle;
//Create the path ref that all the paths will be appended
CGMutablePathRef pathRef = CGPathCreateMutable();
//Create each segment
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.width / 2.0);
for (int i = 0; i < _numberOfSegments - [self numberOfFullSegments]; i++) {
//Create the outer ring segment
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:(self.bounds.size.width / 2.0) startAngle:outerStartAngle endAngle:(outerStartAngle - outerRingAngle) clockwise:NO];
//Create the inner ring segment
if (_segmentBoundaryType == M13ProgressViewSegmentedRingSegmentBoundaryTypeWedge) {
[path addArcWithCenter:center radius:(self.bounds.size.width / 2.0) - _progressRingWidth startAngle:(outerStartAngle - outerRingAngle) endAngle:outerStartAngle clockwise:YES];
} else if (_segmentBoundaryType == M13ProgressViewSegmentedRingSegmentBoundaryTypeRectangle) {
[path addArcWithCenter:center radius:(self.bounds.size.width / 2.0) - _progressRingWidth startAngle:innerStartAngle endAngle:innerStartAngle + innerRingAngle clockwise:YES];
}
[path closePath];
//Add the segment to the path
CGPathAddPath(pathRef, NULL, path.CGPath);
//Setup for the next segment
outerStartAngle -= (outerRingAngle + _segmentSeparationAngle);
innerStartAngle -= (innerRingAngle + _segmentSeparationInnerAngle);
}
//Set the path
_backgroundLayer.path = pathRef;
CGPathRelease(pathRef);
}
- (void)drawProgress
{
//Create parameters to draw background
//The progress segments are drawn clockwise, start with the outer ring, add an arc clockwise. Then add the coresponding arc for the inner ring counterclockwise. Then close the path. The line connecting the two arcs is not needed. From tests it seems to be created automatically.
CGFloat outerStartAngle = - M_PI_2;
//Skip half of a separation angle, since the first separation will be centered upward.
outerStartAngle += (_segmentSeparationAngle / 2.0);
//Calculate the inner start angle position
CGFloat innerStartAngle = - M_PI_2;
innerStartAngle += (_segmentSeparationInnerAngle / 2.0) + innerRingAngle;
//Create the path ref that all the paths will be appended
CGMutablePathRef pathRef = CGPathCreateMutable();
//Create each segment
CGPoint center = CGPointMake(self.bounds.size.width / 2.0, self.bounds.size.width / 2.0);
for (int i = 0; i < [self numberOfFullSegments]; i++) {
//Create the outer ring segment
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:(self.bounds.size.width / 2.0) startAngle:outerStartAngle endAngle:(outerStartAngle + outerRingAngle) clockwise:YES];
//Create the inner ring segment
if (_segmentBoundaryType == M13ProgressViewSegmentedRingSegmentBoundaryTypeWedge) {
[path addArcWithCenter:center radius:(self.bounds.size.width / 2.0) - _progressRingWidth startAngle:(outerStartAngle + outerRingAngle) endAngle:outerStartAngle clockwise:NO];
} else if (_segmentBoundaryType == M13ProgressViewSegmentedRingSegmentBoundaryTypeRectangle) {
[path addArcWithCenter:center radius:(self.bounds.size.width / 2.0) - _progressRingWidth startAngle:innerStartAngle endAngle:innerStartAngle - innerRingAngle clockwise:NO];
}
[path closePath];
//Add the segment to the path
CGPathAddPath(pathRef, NULL, path.CGPath);
//Setup for the next segment
outerStartAngle += (outerRingAngle + _segmentSeparationAngle);
innerStartAngle += (innerRingAngle + _segmentSeparationInnerAngle);
}
//Set the path
_progressLayer.path = pathRef;
CGPathRelease(pathRef);
//Update label
_percentageLabel.text = [_percentageFormatter stringFromNumber:[NSNumber numberWithFloat:self.progress]];
}
- (void)drawIcon
{
if (_currentAction == M13ProgressViewActionSuccess) {
[self drawSuccess];
} else if (_currentAction == M13ProgressViewActionFailure) {
[self drawFailure];
} else if (_currentAction == M13ProgressViewActionNone) {
//Clear layer
_iconLayer.path = nil;
}
}
@end
@@ -1,41 +0,0 @@
//
// M13ProgressViewStripedBar.h
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressView.h"
typedef enum {
M13ProgressViewStripedBarCornerTypeSquare,
M13ProgressViewStripedBarCornerTypeRounded,
M13ProgressViewStripedBarCornerTypeCircle
} M13ProgressViewStripedBarCornerType;
/**A progress bar that is striped, and can animate the stripes if desired.*/
@interface M13ProgressViewStripedBar : M13ProgressView
/**@name Appearance*/
/**The type of corner to display on the bar.*/
@property (nonatomic, assign) M13ProgressViewStripedBarCornerType cornerType;
/**The radius of the corner if the corner type is set to rounded rect.*/
@property (nonatomic, assign) CGFloat cornerRadius;
/**The width of the stripes if shown.*/
@property (nonatomic, assign) CGFloat stripeWidth;
/**Wether or not the stripes are animated.*/
@property (nonatomic, assign) BOOL animateStripes;
/**Wether or not to show the stripes.*/
@property (nonatomic, assign) BOOL showStripes;
/**The color of the stripes.*/
@property (nonatomic, retain) UIColor *stripeColor;
/**The width of the border.*/
@property (nonatomic, assign) CGFloat borderWidth;
@end
@@ -1,418 +0,0 @@
//
// M13ProgressViewStripedBar.m
// M13ProgressView
//
/*Copyright (c) 2013 Brandon McQuilkin
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "M13ProgressViewStripedBar.h"
@interface M13ProgressViewStripedBar ()
/**The start progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationFromValue;
/**The end progress for the progress animation.*/
@property (nonatomic, assign) CGFloat animationToValue;
/**The start time interval for the animaiton.*/
@property (nonatomic, assign) CFTimeInterval animationStartTime;
/**Link to the display to keep animations in sync.*/
@property (nonatomic, strong) CADisplayLink *displayLink;
/**Allow us to write to the progress.*/
@property (nonatomic, readwrite) CGFloat progress;
/**The layer that contains the progress layer. That also masks the progress layer.*/
@property (nonatomic, retain) CALayer *progressSuperLayer;
/**The layer that displays progress in the progress bar.*/
@property (nonatomic, retain) CALayer *progressLayer;
/**The layer that masks the stripes of the progress layer.*/
@property (nonatomic, retain) CAShapeLayer *progressMaskLayer;
/**The mask layer for the progress layer.*/
@property (nonatomic, retain) CAShapeLayer *maskLayer;
/**The background layer that displays the border.*/
@property (nonatomic, retain) CAShapeLayer *backgroundLayer;
/**The layer that is used to animate indeterminate progress.*/
@property (nonatomic, retain) CALayer *indeterminateLayer;
/**The action currently being performed.*/
@property (nonatomic, assign) M13ProgressViewAction currentAction;
/**The stripes layer.*/
@property (nonatomic, retain) CALayer *stripesLayer;
@end
@implementation M13ProgressViewStripedBar
{
UIColor *_currentColor;
}
@dynamic progress;
#pragma mark Initalization and setup
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setup];
}
return self;
}
- (void)setup
{
//Set own background color
self.backgroundColor = [UIColor clearColor];
//Set defauts
self.animationDuration = .3;
_cornerType = M13ProgressViewStripedBarCornerTypeSquare;
_cornerRadius = 3.0;
_stripeWidth = 7.0;
_borderWidth = 1.0;
_showStripes = YES;
//Set default colors
self.primaryColor = [UIColor colorWithRed:0 green:122/255.0 blue:1.0 alpha:1.0];
self.secondaryColor = [UIColor colorWithRed:181/255.0 green:182/255.0 blue:183/255.0 alpha:1.0];
self.stripeColor = [UIColor whiteColor];
_currentColor = self.primaryColor;
//BackgroundLayer
_backgroundLayer = [CAShapeLayer layer];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
_backgroundLayer.fillColor = nil;
_backgroundLayer.lineWidth = _borderWidth;
[self.layer addSublayer:_backgroundLayer];
//Main mask layer
_progressSuperLayer = [CALayer layer];
_maskLayer = [CAShapeLayer layer];
_maskLayer.fillColor = [UIColor blackColor].CGColor;
_maskLayer.backgroundColor = [UIColor clearColor].CGColor;
_progressSuperLayer.mask = _maskLayer;
[self.layer addSublayer:_progressSuperLayer];
//ProgressLayer
_progressLayer = [CALayer layer];
_progressMaskLayer = [CAShapeLayer layer];
_progressMaskLayer.fillColor = [UIColor whiteColor].CGColor;
_progressMaskLayer.backgroundColor = [UIColor clearColor].CGColor;
_progressLayer.mask = _progressMaskLayer;
[_progressSuperLayer addSublayer:_progressLayer];
_stripesLayer = [CALayer layer];
[_progressLayer addSublayer:_stripesLayer];
//Layout
[self layoutSubviews];
//Start stripes animation
[self setAnimateStripes:YES];
}
#pragma mark Appearance
- (void)setPrimaryColor:(UIColor *)primaryColor
{
[super setPrimaryColor:primaryColor];
if (_currentAction == M13ProgressViewActionNone) {
_currentColor = self.primaryColor;
}
[self setNeedsDisplay];
}
- (void)setSecondaryColor:(UIColor *)secondaryColor
{
[super setSecondaryColor:secondaryColor];
_backgroundLayer.strokeColor = self.secondaryColor.CGColor;
[self setNeedsDisplay];
}
- (void)setStripeColor:(UIColor *)stripeColor
{
_stripeColor = stripeColor;
}
- (void)setCornerType:(M13ProgressViewStripedBarCornerType)cornerType
{
_cornerType = cornerType;
[self setNeedsDisplay];
}
- (void)setCornerRadius:(CGFloat)cornerRadius
{
_cornerRadius = cornerRadius;
[self setNeedsDisplay];
}
- (void)setStripeWidth:(CGFloat)stripeWidth
{
_stripeWidth = stripeWidth;
[self invalidateIntrinsicContentSize];
[self setNeedsDisplay];
}
- (void)setBorderWidth:(CGFloat)borderWidth
{
_borderWidth = borderWidth;
[self invalidateIntrinsicContentSize];
[self setNeedsDisplay];
}
- (void)setShowStripes:(BOOL)showStripes
{
_showStripes = showStripes;
[self drawStripes];
}
- (void)setAnimateStripes:(BOOL)animateStripes
{
_animateStripes = animateStripes;
//reset the animations
[_stripesLayer removeAllAnimations];
if (_animateStripes) {
//Set the stripes frame
_stripesLayer.frame = CGRectMake(0, 0, self.bounds.size.width + (4 * _stripeWidth), self.bounds.size.height);
//Add the animation
//Create the animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 2 * self.animationDuration;
animation.repeatCount = HUGE_VALF;
animation.removedOnCompletion = YES;
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(- (2 *_stripeWidth) + (self.bounds.size.width / 2), self.bounds.size.height / 2.0)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(0 + (self.bounds.size.width / 2.0), self.bounds.size.height / 2.0)];
[_stripesLayer addAnimation:animation forKey:@"position"];
}
}
#pragma mark Actions
- (void)setProgress:(CGFloat)progress animated:(BOOL)animated
{
if (animated == NO) {
if (_displayLink) {
//Kill running animations
[_displayLink invalidate];
_displayLink = nil;
}
[super setProgress:progress animated:NO];
[self setNeedsDisplay];
} else {
_animationStartTime = CACurrentMediaTime();
_animationFromValue = self.progress;
_animationToValue = progress;
if (!_displayLink) {
//Create and setup the display link
[self.displayLink invalidate];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateProgress:)];
[self.displayLink addToRunLoop:NSRunLoop.mainRunLoop forMode:NSRunLoopCommonModes];
} /*else {
//Reuse the current display link
}*/
}
}
- (void)animateProgress:(CADisplayLink *)displayLink
{
dispatch_async(dispatch_get_main_queue(), ^{
CGFloat dt = (displayLink.timestamp - _animationStartTime) / self.animationDuration;
if (dt >= 1.0) {
//Order is important! Otherwise concurrency will cause errors, because setProgress: will detect an animation in progress and try to stop it by itself. Once over one, set to actual progress amount. Animation is over.
[self.displayLink invalidate];
self.displayLink = nil;
[super setProgress:_animationToValue animated:NO];
[self setNeedsDisplay];
return;
}
//Set progress
[super setProgress:_animationFromValue + dt * (_animationToValue - _animationFromValue) animated:YES];
[self setNeedsDisplay];
});
}
- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated
{
if (action == M13ProgressViewActionNone && _currentAction != M13ProgressViewActionNone) {
_currentColor = self.primaryColor;
} else if (action == M13ProgressViewActionSuccess && _currentAction != M13ProgressViewActionSuccess) {
_currentColor = [UIColor colorWithRed:63.0f/255.0f green:226.0f/255.0f blue:80.0f/255.0f alpha:1];
} else if (action == M13ProgressViewActionFailure && _currentAction != M13ProgressViewActionFailure) {
_currentColor = [UIColor colorWithRed:249.0f/255.0f green:37.0f/255.0f blue:0 alpha:1];
}
_currentAction = action;
[self drawStripes];
}
- (void)setIndeterminate:(BOOL)indeterminate
{
[super setIndeterminate:indeterminate];
[self drawProgress];
}
#pragma mark Layout
- (void)layoutSubviews
{
//Set the proper location and size of the text.
_backgroundLayer.frame = self.bounds;
_progressSuperLayer.frame = self.bounds;
_progressMaskLayer.frame = self.bounds;
[self setAnimateStripes:YES];
[self calculateMask];
[self drawStripes];
}
- (CGSize)intrinsicContentSize
{
//Border + border to progress bar margin.
CGFloat base = (_borderWidth * 2) + (_borderWidth * 2) + 1;
//Add some stripes so we can see them.
CGFloat width = base + (2 * _stripeWidth);
return CGSizeMake(width, base);
}
#pragma mark Drawing
- (void)drawRect:(CGRect)rect
{
[self drawProgress];
[self drawBackground];
}
- (void)drawProgress
{
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_cornerType == M13ProgressViewStripedBarCornerTypeRounded) {
cornerRadius = _cornerRadius;
} else if (_cornerType == M13ProgressViewStripedBarCornerTypeCircle) {
cornerRadius = self.bounds.size.height - (2 * _borderWidth);
}
//Draw the path
CGRect rect;
if (!self.indeterminate) {
rect = CGRectMake(_borderWidth * 2, _borderWidth * 2, (self.bounds.size.width - (4 * _borderWidth)) * self.progress, self.bounds.size.height - (4 * _borderWidth));
} else {
rect = CGRectMake(_borderWidth * 2, _borderWidth * 2, (self.bounds.size.width - (4 * _borderWidth)), self.bounds.size.height - (4 * _borderWidth));
}
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
[_progressMaskLayer setPath:path.CGPath];
}
- (void)drawBackground
{
//Create the path to stroke
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_cornerType == M13ProgressViewStripedBarCornerTypeRounded) {
cornerRadius = _cornerRadius;
} else if (_cornerType == M13ProgressViewStripedBarCornerTypeCircle) {
cornerRadius = (self.bounds.size.height - _borderWidth) / 2.0;
}
//Draw the path
CGRect rect = CGRectMake(_borderWidth / 2.0, _borderWidth / 2.0, self.bounds.size.width - _borderWidth, self.bounds.size.height - _borderWidth);
UIBezierPath *path;
if (_cornerType == M13ProgressViewStripedBarCornerTypeSquare) {
//Having a 0 corner radius does not display properly since the rect displays like it is not closed.
path = [UIBezierPath bezierPathWithRect:rect];
} else {
path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];;
}
_backgroundLayer.path = path.CGPath;
}
- (void)drawStripes
{
if (!_showStripes && !self.indeterminate) {
//Fill with a solid color
_stripesLayer.backgroundColor = _currentColor.CGColor;
} else {
//Start the image context
UIGraphicsBeginImageContextWithOptions(CGSizeMake(_stripeWidth * 4.0, _stripeWidth * 4.0), NO, [UIScreen mainScreen].scale);
//Fill the background
[_currentColor setFill];
UIBezierPath *fillPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, _stripeWidth * 4.0, _stripeWidth * 4.0)];
[fillPath fill];
//Draw the stripes
[_stripeColor setFill];
for (int i = 0; i < 4; i++) {
//Create the four inital points of the fill shape
CGPoint bottomLeft = CGPointMake(-(_stripeWidth * 4.0), _stripeWidth * 4.0);
CGPoint topLeft = CGPointMake(0, 0);
CGPoint topRight = CGPointMake(_stripeWidth, 0);
CGPoint bottomRight = CGPointMake(-(_stripeWidth * 4.0) + _stripeWidth, _stripeWidth * 4.0);
//Shift all four points as needed to draw all four stripes
bottomLeft.x += i * (2 * _stripeWidth);
topLeft.x += i * (2 * _stripeWidth);
topRight.x += i * (2 * _stripeWidth);
bottomRight.x += i * (2 * _stripeWidth);
//Create the fill path
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:bottomLeft];
[path addLineToPoint:topLeft];
[path addLineToPoint:topRight];
[path addLineToPoint:bottomRight];
[path closePath];
[path fill];
}
//Retreive the image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Set the background of the progress layer
_stripesLayer.backgroundColor = [UIColor colorWithPatternImage:image].CGColor;
}
}
- (void)calculateMask
{
//Calculate the corner radius
CGFloat cornerRadius = 0;
if (_cornerType == M13ProgressViewStripedBarCornerTypeRounded) {
cornerRadius = _cornerRadius;
} else if (_cornerType == M13ProgressViewStripedBarCornerTypeCircle) {
cornerRadius = self.bounds.size.height - (2 * _borderWidth);
}
//Draw the path
CGRect rect = CGRectMake(_borderWidth * 2, _borderWidth * 2, self.bounds.size.width - (4 * _borderWidth), self.bounds.size.height - (4 * _borderWidth));
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
//Create the mask
_maskLayer.path = path.CGPath;
//Set the frame
_maskLayer.frame = self.bounds;
_progressSuperLayer.frame = self.bounds;
}
@end
-4
View File
@@ -1,4 +0,0 @@
Documentation set was installed to Xcode!
Path: /Users/Brandon/Library/Developer/Shared/Documentation/DocSets/com.BrandonMcQuilkin.M13ProgressSuite.docset
Time: 2014-05-12 13:29:03 +0000
-37
View File
@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleIdentifier</key>
<string>com.BrandonMcQuilkin.M13ProgressSuite</string>
<key>CFBundleName</key>
<string>M13ProgressSuite Documentation</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DocSetFallbackURL</key>
<string>http://marxon13.com/Marxon13 Productions (Brandon McQuilkin)</string>
<key>DocSetFeedName</key>
<string>M13ProgressSuite Documentation</string>
<key>DocSetFeedURL</key>
<string>http://marxon13.com/Marxon13 Productions (Brandon McQuilkin)/Marxon13 Productions (Brandon McQuilkin).atom</string>
<key>DocSetMinimumXcodeVersion</key>
<string>3.0</string>
<key>DocSetPlatformFamily</key>
<string>iphoneos</string>
<key>DashDocSetFamily</key>
<string>appledoc</string>
<key>DocSetPublisherIdentifier</key>
<string>com.BrandonMcQuilkin.documentation</string>
<key>DocSetPublisherName</key>
<string>Marxon13 Productions (Brandon McQuilkin)</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved.</string>
</dict>
</plist>
@@ -1,727 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>UINavigationController(M13ProgressViewBar) Category Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">UINavigationController(M13ProgressViewBar) Category Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/cancelProgress">&nbsp;&nbsp;&nbsp;&nbsp;- cancelProgress</option>
<option value="//api/name/finishProgress">&nbsp;&nbsp;&nbsp;&nbsp;- finishProgress</option>
<option value="//api/name/isShowingProgressBar">&nbsp;&nbsp;&nbsp;&nbsp;- isShowingProgressBar</option>
<option value="//api/name/setIndeterminate:">&nbsp;&nbsp;&nbsp;&nbsp;- setIndeterminate:</option>
<option value="//api/name/setPrimaryColor:">&nbsp;&nbsp;&nbsp;&nbsp;- setPrimaryColor:</option>
<option value="//api/name/setProgress:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgress:animated:</option>
<option value="//api/name/setProgressTitle:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgressTitle:</option>
<option value="//api/name/setSecondaryColor:">&nbsp;&nbsp;&nbsp;&nbsp;- setSecondaryColor:</option>
<option value="//api/name/showProgress">&nbsp;&nbsp;&nbsp;&nbsp;- showProgress</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Actions">Actions</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/cancelProgress">cancelProgress</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/finishProgress">finishProgress</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/isShowingProgressBar">isShowingProgressBar</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setIndeterminate:">setIndeterminate:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setPrimaryColor:">setPrimaryColor:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgress:animated:">setProgress:animated:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgressTitle:">setProgressTitle:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setSecondaryColor:">setSecondaryColor:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/showProgress">showProgress</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="UINavigationController(M13ProgressViewBar) Category Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">UINavigationController(M13ProgressViewBar) Category Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">UINavigationController+M13ProgressViewBar.h<br />UINavigationController+M13ProgressViewBar.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>A UINavagationController category that adds a progress view to the UINavigationBar.</p>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<a title="Actions" name="task_Actions"></a>
<h3 class="subsubtitle task-title">Actions</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/showProgress">&ndash;&nbsp;showProgress</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setProgress:animated:">&ndash;&nbsp;setProgress:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setProgressTitle:">&ndash;&nbsp;setProgressTitle:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setIndeterminate:">&ndash;&nbsp;setIndeterminate:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/finishProgress">&ndash;&nbsp;finishProgress</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/cancelProgress">&ndash;&nbsp;cancelProgress</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/isShowingProgressBar">&ndash;&nbsp;isShowingProgressBar</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setPrimaryColor:">&ndash;&nbsp;setPrimaryColor:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setSecondaryColor:">&ndash;&nbsp;setSecondaryColor:</a></code>
</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/cancelProgress" title="cancelProgress"></a>
<h3 class="subsubtitle method-title">cancelProgress</h3>
<div class="method-subsection brief-description">
<p>Remove the progress bar from the display.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)cancelProgress</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/finishProgress" title="finishProgress"></a>
<h3 class="subsubtitle method-title">finishProgress</h3>
<div class="method-subsection brief-description">
<p>Fill the progress bar completely and remove it from display.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)finishProgress</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/isShowingProgressBar" title="isShowingProgressBar"></a>
<h3 class="subsubtitle method-title">isShowingProgressBar</h3>
<div class="method-subsection brief-description">
<p>Wether or not the progress bar is showing.</p>
</div>
<div class="method-subsection method-declaration"><code>- (BOOL)isShowingProgressBar</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setIndeterminate:" title="setIndeterminate:"></a>
<h3 class="subsubtitle method-title">setIndeterminate:</h3>
<div class="method-subsection brief-description">
<p>Set wether or not to show indeterminate.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setIndeterminate:(BOOL)<em>indeterminate</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>indeterminate</em></dt>
<dd><p>wether or not the progress bar is indeterminate.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setPrimaryColor:" title="setPrimaryColor:"></a>
<h3 class="subsubtitle method-title">setPrimaryColor:</h3>
<div class="method-subsection brief-description">
<p>The primary color of the progress bar if you do not want it to be the same as the UINavigationBar&rsquo;s tint color. If set to nil, the UINavigationBar&rsquo;s tint color will be used.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setPrimaryColor:(UIColor *)<em>primaryColor</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>primaryColor</em></dt>
<dd><p>The color to set.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setProgress:animated:" title="setProgress:animated:"></a>
<h3 class="subsubtitle method-title">setProgress:animated:</h3>
<div class="method-subsection brief-description">
<p>Set the progress to display on the progress bar.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgress:(CGFloat)<em>progress</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>progress</em></dt>
<dd><p>The progress to display as a percentage from 0-1.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the change.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setProgressTitle:" title="setProgressTitle:"></a>
<h3 class="subsubtitle method-title">setProgressTitle:</h3>
<div class="method-subsection brief-description">
<p>Set the string to replace the UINavigationBar&rsquo;s title with while showing progress. Send nil to reset the title.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgressTitle:(NSString *)<em>title</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>title</em></dt>
<dd><p>The string to replace the UINavigationBar&rsquo;s title while showing progress.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setSecondaryColor:" title="setSecondaryColor:"></a>
<h3 class="subsubtitle method-title">setSecondaryColor:</h3>
<div class="method-subsection brief-description">
<p>The secondary color of the progress bar, if nil, the secondary color will be the barTintColor.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setSecondaryColor:(UIColor *)<em>secondaryColor</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>secondaryColor</em></dt>
<dd><p>The color to set.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/showProgress" title="showProgress"></a>
<h3 class="subsubtitle method-title">showProgress</h3>
<div class="method-subsection brief-description">
<p>Show the progress bar.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)showProgress</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">UINavigationController+M13ProgressViewBar.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,932 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressConsole Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressConsole Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/animationDuration">&nbsp;&nbsp;&nbsp;&nbsp;animationDuration</option>
<option value="//api/name/indeterminate">&nbsp;&nbsp;&nbsp;&nbsp;indeterminate</option>
<option value="//api/name/lines">&nbsp;&nbsp;&nbsp;&nbsp;lines</option>
<option value="//api/name/maskColor">&nbsp;&nbsp;&nbsp;&nbsp;maskColor</option>
<option value="//api/name/maskType">&nbsp;&nbsp;&nbsp;&nbsp;maskType</option>
<option value="//api/name/prefix">&nbsp;&nbsp;&nbsp;&nbsp;prefix</option>
<option value="//api/name/progress">&nbsp;&nbsp;&nbsp;&nbsp;progress</option>
<option value="//api/name/progressType">&nbsp;&nbsp;&nbsp;&nbsp;progressType</option>
<option value="//api/name/showCursor">&nbsp;&nbsp;&nbsp;&nbsp;showCursor</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/addNewLineWithString:">&nbsp;&nbsp;&nbsp;&nbsp;- addNewLineWithString:</option>
<option value="//api/name/clear">&nbsp;&nbsp;&nbsp;&nbsp;- clear</option>
<option value="//api/name/setCurrentLine:">&nbsp;&nbsp;&nbsp;&nbsp;- setCurrentLine:</option>
<option value="//api/name/setProgress:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgress:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Progress">Progress</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Appearance">Appearance</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Properties">Properties</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Actions">Actions</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationDuration">animationDuration</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/indeterminate">indeterminate</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/lines">lines</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/maskColor">maskColor</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/maskType">maskType</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/prefix">prefix</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progress">progress</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progressType">progressType</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/showCursor">showCursor</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/addNewLineWithString:">addNewLineWithString:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/clear">clear</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setCurrentLine:">setCurrentLine:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgress:">setProgress:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressConsole Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressConsole Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value">UITextView</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressConsole.h<br />M13ProgressConsole.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>A <a href="#//api/name/progress">progress</a> view that shows <a href="#//api/name/progress">progress</a> in the style of terminal.</p>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<a title="Progress" name="task_Progress"></a>
<h3 class="subsubtitle task-title">Progress</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/progress">&nbsp;&nbsp;progress</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/indeterminate">&nbsp;&nbsp;indeterminate</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/progressType">&nbsp;&nbsp;progressType</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<a title="Appearance" name="task_Appearance"></a>
<h3 class="subsubtitle task-title">Appearance</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/maskType">&nbsp;&nbsp;maskType</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/maskColor">&nbsp;&nbsp;maskColor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/showCursor">&nbsp;&nbsp;showCursor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/prefix">&nbsp;&nbsp;prefix</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/lines">&nbsp;&nbsp;lines</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<a title="Properties" name="task_Properties"></a>
<h3 class="subsubtitle task-title">Properties</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/animationDuration">&nbsp;&nbsp;animationDuration</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<a title="Actions" name="task_Actions"></a>
<h3 class="subsubtitle task-title">Actions</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/setProgress:">&ndash;&nbsp;setProgress:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setCurrentLine:">&ndash;&nbsp;setCurrentLine:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/addNewLineWithString:">&ndash;&nbsp;addNewLineWithString:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/clear">&ndash;&nbsp;clear</a></code>
</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/animationDuration" title="animationDuration"></a>
<h3 class="subsubtitle method-title">animationDuration</h3>
<div class="method-subsection brief-description">
<p>The durations of animations in seconds.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationDuration</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/indeterminate" title="indeterminate"></a>
<h3 class="subsubtitle method-title">indeterminate</h3>
<div class="method-subsection brief-description">
<p>Wether or not the <a href="#//api/name/progress">progress</a> view is indeterminate.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL indeterminate</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/lines" title="lines"></a>
<h3 class="subsubtitle method-title">lines</h3>
<div class="method-subsection brief-description">
<p>The array containing all the lines displyed.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) NSArray *lines</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/maskColor" title="maskColor"></a>
<h3 class="subsubtitle method-title">maskColor</h3>
<div class="method-subsection brief-description">
<p>The color of the mask if set to solid color.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIColor *maskColor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/maskType" title="maskType"></a>
<h3 class="subsubtitle method-title">maskType</h3>
<div class="method-subsection brief-description">
<p>The background type of the console.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) M13ProgressConsoleMaskType maskType</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/prefix" title="prefix"></a>
<h3 class="subsubtitle method-title">prefix</h3>
<div class="method-subsection brief-description">
<p>The prefix string for each line.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) NSString *prefix</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progress" title="progress"></a>
<h3 class="subsubtitle method-title">progress</h3>
<div class="method-subsection brief-description">
<p>The progress displayed to the user.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, readonly) CGFloat progress</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progressType" title="progressType"></a>
<h3 class="subsubtitle method-title">progressType</h3>
<div class="method-subsection brief-description">
<p>Show <a href="#//api/name/progress">progress</a> at the end of each line.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) M13ProgressConsoleProgressType progressType</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/showCursor" title="showCursor"></a>
<h3 class="subsubtitle method-title">showCursor</h3>
<div class="method-subsection brief-description">
<p>Wether or not to show the cursor.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL showCursor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/addNewLineWithString:" title="addNewLineWithString:"></a>
<h3 class="subsubtitle method-title">addNewLineWithString:</h3>
<div class="method-subsection brief-description">
<p>Add a new line with the given text.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)addNewLineWithString:(NSString *)<em>newLine</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>newLine</em></dt>
<dd><p>The text to start a new line with.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/clear" title="clear"></a>
<h3 class="subsubtitle method-title">clear</h3>
<div class="method-subsection brief-description">
<p>Clears the console.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)clear</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setCurrentLine:" title="setCurrentLine:"></a>
<h3 class="subsubtitle method-title">setCurrentLine:</h3>
<div class="method-subsection brief-description">
<p>Set the text of the current line.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setCurrentLine:(NSString *)<em>currentLine</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>currentLine</em></dt>
<dd><p>The string to replace the current line with.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setProgress:" title="setProgress:"></a>
<h3 class="subsubtitle method-title">setProgress:</h3>
<div class="method-subsection brief-description">
<p>Set the <a href="#//api/name/progress">progress</a> of the <a href="../Classes/M13ProgressView.html"><code>M13ProgressView</code></a>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgress:(CGFloat)<em>progress</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>progress</em></dt>
<dd><p>The <a href="#//api/name/progress">progress</a> to show on the current line.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressConsole.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -1,646 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressView Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressView Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/animationDuration">&nbsp;&nbsp;&nbsp;&nbsp;animationDuration</option>
<option value="//api/name/indeterminate">&nbsp;&nbsp;&nbsp;&nbsp;indeterminate</option>
<option value="//api/name/primaryColor">&nbsp;&nbsp;&nbsp;&nbsp;primaryColor</option>
<option value="//api/name/progress">&nbsp;&nbsp;&nbsp;&nbsp;progress</option>
<option value="//api/name/secondaryColor">&nbsp;&nbsp;&nbsp;&nbsp;secondaryColor</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/performAction:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- performAction:animated:</option>
<option value="//api/name/setProgress:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgress:animated:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Appearance">Appearance</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Properties">Properties</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Actions">Actions</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationDuration">animationDuration</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/indeterminate">indeterminate</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/primaryColor">primaryColor</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progress">progress</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/secondaryColor">secondaryColor</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/performAction:animated:">performAction:animated:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgress:animated:">setProgress:animated:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressView Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressView Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value">UIView</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressView.h<br />M13ProgressView.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>A standardized base upon which to build <a href="#//api/name/progress">progress</a> views for applications. This allows one to use any subclass <a href="#//api/name/progress">progress</a> view in any component that use this standard.</p>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<a title="Appearance" name="task_Appearance"></a>
<h3 class="subsubtitle task-title">Appearance</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/primaryColor">&nbsp;&nbsp;primaryColor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/secondaryColor">&nbsp;&nbsp;secondaryColor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<a title="Properties" name="task_Properties"></a>
<h3 class="subsubtitle task-title">Properties</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/indeterminate">&nbsp;&nbsp;indeterminate</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationDuration">&nbsp;&nbsp;animationDuration</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/progress">&nbsp;&nbsp;progress</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<a title="Actions" name="task_Actions"></a>
<h3 class="subsubtitle task-title">Actions</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/setProgress:animated:">&ndash;&nbsp;setProgress:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/performAction:animated:">&ndash;&nbsp;performAction:animated:</a></code>
</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/animationDuration" title="animationDuration"></a>
<h3 class="subsubtitle method-title">animationDuration</h3>
<div class="method-subsection brief-description">
<p>The durations of animations in seconds.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationDuration</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/indeterminate" title="indeterminate"></a>
<h3 class="subsubtitle method-title">indeterminate</h3>
<div class="method-subsection brief-description">
<p>Wether or not the <a href="#//api/name/progress">progress</a> view is indeterminate.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL indeterminate</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/primaryColor" title="primaryColor"></a>
<h3 class="subsubtitle method-title">primaryColor</h3>
<div class="method-subsection brief-description">
<p>The primary color of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIColor *primaryColor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progress" title="progress"></a>
<h3 class="subsubtitle method-title">progress</h3>
<div class="method-subsection brief-description">
<p>The progress displayed to the user.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, readonly) CGFloat progress</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/secondaryColor" title="secondaryColor"></a>
<h3 class="subsubtitle method-title">secondaryColor</h3>
<div class="method-subsection brief-description">
<p>The secondary color of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIColor *secondaryColor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/performAction:animated:" title="performAction:animated:"></a>
<h3 class="subsubtitle method-title">performAction:animated:</h3>
<div class="method-subsection brief-description">
<p>Perform the given action if defined. Usually showing success or failure.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)performAction:(M13ProgressViewAction)<em>action</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>action</em></dt>
<dd><p>The action to perform.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the change</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setProgress:animated:" title="setProgress:animated:"></a>
<h3 class="subsubtitle method-title">setProgress:animated:</h3>
<div class="method-subsection brief-description">
<p>Set the <a href="#//api/name/progress">progress</a> of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgress:(CGFloat)<em>progress</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>progress</em></dt>
<dd><p>The <a href="#//api/name/progress">progress</a> to show on the <a href="#//api/name/progress">progress</a> view.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the <a href="#//api/name/progress">progress</a> change.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,842 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressViewFilteredImage Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressViewFilteredImage Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/animationFromValue">&nbsp;&nbsp;&nbsp;&nbsp;animationFromValue</option>
<option value="//api/name/animationStartTime">&nbsp;&nbsp;&nbsp;&nbsp;animationStartTime</option>
<option value="//api/name/animationToValue">&nbsp;&nbsp;&nbsp;&nbsp;animationToValue</option>
<option value="//api/name/displayLink">&nbsp;&nbsp;&nbsp;&nbsp;displayLink</option>
<option value="//api/name/filterParameters">&nbsp;&nbsp;&nbsp;&nbsp;filterParameters</option>
<option value="//api/name/filters">&nbsp;&nbsp;&nbsp;&nbsp;filters</option>
<option value="//api/name/progressImage">&nbsp;&nbsp;&nbsp;&nbsp;progressImage</option>
<option value="//api/name/progressView">&nbsp;&nbsp;&nbsp;&nbsp;progressView</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/performAction:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- performAction:animated:</option>
<option value="//api/name/setIndeterminate:">&nbsp;&nbsp;&nbsp;&nbsp;- setIndeterminate:</option>
<option value="//api/name/setProgress:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgress:animated:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Appearance">Appearance</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Extension Methods">Extension Methods</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationFromValue">animationFromValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationStartTime">animationStartTime</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationToValue">animationToValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/displayLink">displayLink</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/filterParameters">filterParameters</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/filters">filters</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progressImage">progressImage</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progressView">progressView</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/performAction:animated:">performAction:animated:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setIndeterminate:">setIndeterminate:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgress:animated:">setProgress:animated:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressViewFilteredImage Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressViewFilteredImage Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value"><a href="../Classes/M13ProgressView.html">M13ProgressView</a> : UIView</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressViewFilteredImage.h<br />M13ProgressViewFilteredImage.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>A progress view where progress is shown by changes in CIFilters.</p><div class="note"><p><strong>Note:</strong> This progress bar does not have in indeterminate mode and does not respond to actions.</p></div>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<a title="Appearance" name="task_Appearance"></a>
<h3 class="subsubtitle task-title">Appearance</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/progressImage">&nbsp;&nbsp;progressImage</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/progressView">&nbsp;&nbsp;progressView</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/filters">&nbsp;&nbsp;filters</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/filterParameters">&nbsp;&nbsp;filterParameters</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<h3 class="subsubtitle task-title">Other Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/setProgress:animated:">&ndash;&nbsp;setProgress:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/performAction:animated:">&ndash;&nbsp;performAction:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setIndeterminate:">&ndash;&nbsp;setIndeterminate:</a></code>
</span>
</li>
</ul>
<a title="Extension Methods" name="task_Extension Methods"></a>
<h3 class="subsubtitle task-title">Extension Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/animationFromValue">&nbsp;&nbsp;animationFromValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationToValue">&nbsp;&nbsp;animationToValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationStartTime">&nbsp;&nbsp;animationStartTime</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/displayLink">&nbsp;&nbsp;displayLink</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/animationFromValue" title="animationFromValue"></a>
<h3 class="subsubtitle method-title">animationFromValue</h3>
<div class="method-subsection brief-description">
<p>The start progress for the progress animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationFromValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationStartTime" title="animationStartTime"></a>
<h3 class="subsubtitle method-title">animationStartTime</h3>
<div class="method-subsection brief-description">
<p>The start time interval for the animaiton.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CFTimeInterval animationStartTime</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationToValue" title="animationToValue"></a>
<h3 class="subsubtitle method-title">animationToValue</h3>
<div class="method-subsection brief-description">
<p>The end progress for the progress animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationToValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/displayLink" title="displayLink"></a>
<h3 class="subsubtitle method-title">displayLink</h3>
<div class="method-subsection brief-description">
<p>Link to the display to keep animations in sync.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, strong) CADisplayLink *displayLink</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/filterParameters" title="filterParameters"></a>
<h3 class="subsubtitle method-title">filterParameters</h3>
<div class="method-subsection brief-description">
<p>The dictionaries of dictionaries that coresspond to filter properties to be changed.
NSArray
|&mdash;&mdash; NSDictionary (Index matches the coresponding CIFilter in <a href="#//api/name/filters">filters</a>)
| |&mdash;- &ldquo;Parameter Key&rdquo; -> NSDictionary
| | |&mdash;&mdash; &ldquo;Start Value&rdquo; -> NSNumber
| | |&mdash;&mdash; &ldquo;End Value&rdquo; -> NSNumber
| |&mdash;- &ldquo;Parameter Key&rdquo; -> NSDictionary
| |&mdash;&mdash; &ldquo;Start Value&rdquo; -> NSNumber
| |&mdash;&mdash; &ldquo;End Value&rdquo; -> NSNumber
|&mdash;&mdash; NSDictionary &hellip;</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) NSArray *filterParameters</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/filters" title="filters"></a>
<h3 class="subsubtitle method-title">filters</h3>
<div class="method-subsection brief-description">
<p>The array of CIFilters to apply to the image.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) NSArray *filters</code></div>
<div class="method-subsection discussion-section">
<h4 class="method-subtitle">Discussion</h4>
<div class="note"><p><strong>Note:</strong> The filters need to be encased in a M13ProgressViewCIFilterWrapper</p></div>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progressImage" title="progressImage"></a>
<h3 class="subsubtitle method-title">progressImage</h3>
<div class="method-subsection brief-description">
<p>The image to use when showing progress.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIImage *progressImage</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progressView" title="progressView"></a>
<h3 class="subsubtitle method-title">progressView</h3>
<div class="method-subsection brief-description">
<p>The UIImageView that shows the progress image.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIImageView *progressView</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewFilteredImage.h</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/performAction:animated:" title="performAction:animated:"></a>
<h3 class="subsubtitle method-title">performAction:animated:</h3>
<div class="method-subsection brief-description">
<p>Perform the given action if defined. Usually showing success or failure.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)performAction:(M13ProgressViewAction)<em>action</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>action</em></dt>
<dd><p>The action to perform.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the change</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setIndeterminate:" title="setIndeterminate:"></a>
<h3 class="subsubtitle method-title">setIndeterminate:</h3>
<div class="method-subsection brief-description">
<p>Wether or not the <a href="#//api/name/progress">progress</a> view is indeterminate.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setIndeterminate:(BOOL)<em>indeterminate</em></code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setProgress:animated:" title="setProgress:animated:"></a>
<h3 class="subsubtitle method-title">setProgress:animated:</h3>
<div class="method-subsection brief-description">
<p>Set the <a href="#//api/name/progress">progress</a> of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgress:(CGFloat)<em>progress</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>progress</em></dt>
<dd><p>The <a href="#//api/name/progress">progress</a> to show on the <a href="#//api/name/progress">progress</a> view.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the <a href="#//api/name/progress">progress</a> change.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,874 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressViewImage Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressViewImage Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/animationFromValue">&nbsp;&nbsp;&nbsp;&nbsp;animationFromValue</option>
<option value="//api/name/animationStartTime">&nbsp;&nbsp;&nbsp;&nbsp;animationStartTime</option>
<option value="//api/name/animationToValue">&nbsp;&nbsp;&nbsp;&nbsp;animationToValue</option>
<option value="//api/name/displayLink">&nbsp;&nbsp;&nbsp;&nbsp;displayLink</option>
<option value="//api/name/drawGreyscaleBackground">&nbsp;&nbsp;&nbsp;&nbsp;drawGreyscaleBackground</option>
<option value="//api/name/progress">&nbsp;&nbsp;&nbsp;&nbsp;progress</option>
<option value="//api/name/progressDirection">&nbsp;&nbsp;&nbsp;&nbsp;progressDirection</option>
<option value="//api/name/progressImage">&nbsp;&nbsp;&nbsp;&nbsp;progressImage</option>
<option value="//api/name/progressView">&nbsp;&nbsp;&nbsp;&nbsp;progressView</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/performAction:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- performAction:animated:</option>
<option value="//api/name/setIndeterminate:">&nbsp;&nbsp;&nbsp;&nbsp;- setIndeterminate:</option>
<option value="//api/name/setProgress:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgress:animated:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Appearance">Appearance</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Extension Methods">Extension Methods</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationFromValue">animationFromValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationStartTime">animationStartTime</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationToValue">animationToValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/displayLink">displayLink</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/drawGreyscaleBackground">drawGreyscaleBackground</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progress">progress</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progressDirection">progressDirection</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progressImage">progressImage</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progressView">progressView</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/performAction:animated:">performAction:animated:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setIndeterminate:">setIndeterminate:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgress:animated:">setProgress:animated:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressViewImage Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressViewImage Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value"><a href="../Classes/M13ProgressView.html">M13ProgressView</a> : UIView</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressViewImage.h<br />M13ProgressViewImage.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>A <a href="#//api/name/progress">progress</a> bar where <a href="#//api/name/progress">progress</a> is shown by cutting an image.</p><div class="note"><p><strong>Note:</strong> This <a href="#//api/name/progress">progress</a> bar does not have in indeterminate mode and does not respond to actions.</p></div>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<a title="Appearance" name="task_Appearance"></a>
<h3 class="subsubtitle task-title">Appearance</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/progressImage">&nbsp;&nbsp;progressImage</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/progressDirection">&nbsp;&nbsp;progressDirection</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/drawGreyscaleBackground">&nbsp;&nbsp;drawGreyscaleBackground</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<h3 class="subsubtitle task-title">Other Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/setProgress:animated:">&ndash;&nbsp;setProgress:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/performAction:animated:">&ndash;&nbsp;performAction:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setIndeterminate:">&ndash;&nbsp;setIndeterminate:</a></code>
</span>
</li>
</ul>
<a title="Extension Methods" name="task_Extension Methods"></a>
<h3 class="subsubtitle task-title">Extension Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/animationFromValue">&nbsp;&nbsp;animationFromValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationToValue">&nbsp;&nbsp;animationToValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationStartTime">&nbsp;&nbsp;animationStartTime</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/displayLink">&nbsp;&nbsp;displayLink</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/progress">&nbsp;&nbsp;progress</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/progressView">&nbsp;&nbsp;progressView</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/animationFromValue" title="animationFromValue"></a>
<h3 class="subsubtitle method-title">animationFromValue</h3>
<div class="method-subsection brief-description">
<p>The start <a href="#//api/name/progress">progress</a> for the <a href="#//api/name/progress">progress</a> animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationFromValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationStartTime" title="animationStartTime"></a>
<h3 class="subsubtitle method-title">animationStartTime</h3>
<div class="method-subsection brief-description">
<p>The start time interval for the animaiton.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CFTimeInterval animationStartTime</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationToValue" title="animationToValue"></a>
<h3 class="subsubtitle method-title">animationToValue</h3>
<div class="method-subsection brief-description">
<p>The end <a href="#//api/name/progress">progress</a> for the <a href="#//api/name/progress">progress</a> animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationToValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/displayLink" title="displayLink"></a>
<h3 class="subsubtitle method-title">displayLink</h3>
<div class="method-subsection brief-description">
<p>Link to the display to keep animations in sync.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, strong) CADisplayLink *displayLink</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/drawGreyscaleBackground" title="drawGreyscaleBackground"></a>
<h3 class="subsubtitle method-title">drawGreyscaleBackground</h3>
<div class="method-subsection brief-description">
<p>Wether or not to draw the greyscale background.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL drawGreyscaleBackground</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progress" title="progress"></a>
<h3 class="subsubtitle method-title">progress</h3>
<div class="method-subsection brief-description">
<p>Allow us to write to the progress.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, readwrite) CGFloat progress</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progressDirection" title="progressDirection"></a>
<h3 class="subsubtitle method-title">progressDirection</h3>
<div class="method-subsection brief-description">
<p>The direction of <a href="#//api/name/progress">progress</a>. (What direction the fill proceeds in.)</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) M13ProgressViewImageProgressDirection progressDirection</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progressImage" title="progressImage"></a>
<h3 class="subsubtitle method-title">progressImage</h3>
<div class="method-subsection brief-description">
<p>The image to use when showing <a href="#//api/name/progress">progress</a>.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIImage *progressImage</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progressView" title="progressView"></a>
<h3 class="subsubtitle method-title">progressView</h3>
<div class="method-subsection brief-description">
<p>The UIImageView that shows the <a href="#//api/name/progress">progress</a> image.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIImageView *progressView</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewImage.m</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/performAction:animated:" title="performAction:animated:"></a>
<h3 class="subsubtitle method-title">performAction:animated:</h3>
<div class="method-subsection brief-description">
<p>Perform the given action if defined. Usually showing success or failure.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)performAction:(M13ProgressViewAction)<em>action</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>action</em></dt>
<dd><p>The action to perform.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the change</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setIndeterminate:" title="setIndeterminate:"></a>
<h3 class="subsubtitle method-title">setIndeterminate:</h3>
<div class="method-subsection brief-description">
<p>Wether or not the <a href="#//api/name/progress">progress</a> view is indeterminate.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setIndeterminate:(BOOL)<em>indeterminate</em></code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setProgress:animated:" title="setProgress:animated:"></a>
<h3 class="subsubtitle method-title">setProgress:animated:</h3>
<div class="method-subsection brief-description">
<p>Set the <a href="#//api/name/progress">progress</a> of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgress:(CGFloat)<em>progress</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>progress</em></dt>
<dd><p>The <a href="#//api/name/progress">progress</a> to show on the <a href="#//api/name/progress">progress</a> view.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the <a href="#//api/name/progress">progress</a> change.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,893 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressViewLetterpress Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressViewLetterpress Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/animationFromValue">&nbsp;&nbsp;&nbsp;&nbsp;animationFromValue</option>
<option value="//api/name/animationStartTime">&nbsp;&nbsp;&nbsp;&nbsp;animationStartTime</option>
<option value="//api/name/animationToValue">&nbsp;&nbsp;&nbsp;&nbsp;animationToValue</option>
<option value="//api/name/dampingCoefficient">&nbsp;&nbsp;&nbsp;&nbsp;dampingCoefficient</option>
<option value="//api/name/displayLink">&nbsp;&nbsp;&nbsp;&nbsp;displayLink</option>
<option value="//api/name/mass">&nbsp;&nbsp;&nbsp;&nbsp;mass</option>
<option value="//api/name/notchSize">&nbsp;&nbsp;&nbsp;&nbsp;notchSize</option>
<option value="//api/name/numberOfGridPoints">&nbsp;&nbsp;&nbsp;&nbsp;numberOfGridPoints</option>
<option value="//api/name/pointShape">&nbsp;&nbsp;&nbsp;&nbsp;pointShape</option>
<option value="//api/name/pointSpacing">&nbsp;&nbsp;&nbsp;&nbsp;pointSpacing</option>
<option value="//api/name/springConstant">&nbsp;&nbsp;&nbsp;&nbsp;springConstant</option>
<option value="//api/name/springDisplayLink">&nbsp;&nbsp;&nbsp;&nbsp;springDisplayLink</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/setProgress:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgress:animated:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Properties">Properties</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Extension Methods">Extension Methods</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationFromValue">animationFromValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationStartTime">animationStartTime</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationToValue">animationToValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/dampingCoefficient">dampingCoefficient</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/displayLink">displayLink</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/mass">mass</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/notchSize">notchSize</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/numberOfGridPoints">numberOfGridPoints</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/pointShape">pointShape</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/pointSpacing">pointSpacing</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/springConstant">springConstant</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/springDisplayLink">springDisplayLink</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgress:animated:">setProgress:animated:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressViewLetterpress Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressViewLetterpress Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value"><a href="../Classes/M13ProgressView.html">M13ProgressView</a> : UIView</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressViewLetterpress.h<br />M13ProgressViewLetterpress.m</td>
</tr>
</tbody></table></div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<a title="Properties" name="task_Properties"></a>
<h3 class="subsubtitle task-title">Properties</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/numberOfGridPoints">&nbsp;&nbsp;numberOfGridPoints</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/pointShape">&nbsp;&nbsp;pointShape</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/pointSpacing">&nbsp;&nbsp;pointSpacing</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/notchSize">&nbsp;&nbsp;notchSize</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/springConstant">&nbsp;&nbsp;springConstant</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/dampingCoefficient">&nbsp;&nbsp;dampingCoefficient</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/mass">&nbsp;&nbsp;mass</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<h3 class="subsubtitle task-title">Other Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/setProgress:animated:">&ndash;&nbsp;setProgress:animated:</a></code>
</span>
</li>
</ul>
<a title="Extension Methods" name="task_Extension Methods"></a>
<h3 class="subsubtitle task-title">Extension Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/animationFromValue">&nbsp;&nbsp;animationFromValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationToValue">&nbsp;&nbsp;animationToValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationStartTime">&nbsp;&nbsp;animationStartTime</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/displayLink">&nbsp;&nbsp;displayLink</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/springDisplayLink">&nbsp;&nbsp;springDisplayLink</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/animationFromValue" title="animationFromValue"></a>
<h3 class="subsubtitle method-title">animationFromValue</h3>
<div class="method-subsection brief-description">
<p>The start progress for the progress animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationFromValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationStartTime" title="animationStartTime"></a>
<h3 class="subsubtitle method-title">animationStartTime</h3>
<div class="method-subsection brief-description">
<p>The start time interval for the animaiton.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CFTimeInterval animationStartTime</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationToValue" title="animationToValue"></a>
<h3 class="subsubtitle method-title">animationToValue</h3>
<div class="method-subsection brief-description">
<p>The end progress for the progress animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationToValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/dampingCoefficient" title="dampingCoefficient"></a>
<h3 class="subsubtitle method-title">dampingCoefficient</h3>
<div class="method-subsection brief-description">
<p>The constant that determines how long the progress view &ldquo;bounces&rdquo; for.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat dampingCoefficient</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/displayLink" title="displayLink"></a>
<h3 class="subsubtitle method-title">displayLink</h3>
<div class="method-subsection brief-description">
<p>Link to the display to keep animations in sync.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, strong) CADisplayLink *displayLink</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/mass" title="mass"></a>
<h3 class="subsubtitle method-title">mass</h3>
<div class="method-subsection brief-description">
<p>The constant that determines how much the <a href="#//api/name/springConstant">springConstant</a> and dampingCoefficent affect the animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat mass</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/notchSize" title="notchSize"></a>
<h3 class="subsubtitle method-title">notchSize</h3>
<div class="method-subsection brief-description">
<p>The size of the notch to carve out on one side.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGSize notchSize</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/numberOfGridPoints" title="numberOfGridPoints"></a>
<h3 class="subsubtitle method-title">numberOfGridPoints</h3>
<div class="method-subsection brief-description">
<p>The number of grid points in each direction.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGPoint numberOfGridPoints</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/pointShape" title="pointShape"></a>
<h3 class="subsubtitle method-title">pointShape</h3>
<div class="method-subsection brief-description">
<p>The shape of the grid points.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) M13ProgressViewLetterpressPointShape pointShape</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/pointSpacing" title="pointSpacing"></a>
<h3 class="subsubtitle method-title">pointSpacing</h3>
<div class="method-subsection brief-description">
<p>The amount of space between the grid points.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat pointSpacing</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/springConstant" title="springConstant"></a>
<h3 class="subsubtitle method-title">springConstant</h3>
<div class="method-subsection brief-description">
<p>The spring constant that defines the amount of &ldquo;spring&rdquo; the progress view has in its animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat springConstant</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/springDisplayLink" title="springDisplayLink"></a>
<h3 class="subsubtitle method-title">springDisplayLink</h3>
<div class="method-subsection brief-description">
<p>The display link that controls the spring animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, strong) CADisplayLink *springDisplayLink</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewLetterpress.m</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/setProgress:animated:" title="setProgress:animated:"></a>
<h3 class="subsubtitle method-title">setProgress:animated:</h3>
<div class="method-subsection brief-description">
<p>Set the <a href="#//api/name/progress">progress</a> of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgress:(CGFloat)<em>progress</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>progress</em></dt>
<dd><p>The <a href="#//api/name/progress">progress</a> to show on the <a href="#//api/name/progress">progress</a> view.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the <a href="#//api/name/progress">progress</a> change.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,612 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressViewMetroDot Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressViewMetroDot Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/failureColor">&nbsp;&nbsp;&nbsp;&nbsp;failureColor</option>
<option value="//api/name/highlighted">&nbsp;&nbsp;&nbsp;&nbsp;highlighted</option>
<option value="//api/name/primaryColor">&nbsp;&nbsp;&nbsp;&nbsp;primaryColor</option>
<option value="//api/name/secondaryColor">&nbsp;&nbsp;&nbsp;&nbsp;secondaryColor</option>
<option value="//api/name/successColor">&nbsp;&nbsp;&nbsp;&nbsp;successColor</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/copy">&nbsp;&nbsp;&nbsp;&nbsp;- copy</option>
<option value="//api/name/performAction:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- performAction:animated:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/failureColor">failureColor</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/highlighted">highlighted</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/primaryColor">primaryColor</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/secondaryColor">secondaryColor</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/successColor">successColor</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/copy">copy</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/performAction:animated:">performAction:animated:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressViewMetroDot Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressViewMetroDot Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value">CALayer</td>
</tr><tr>
<td class="specification-title">Conforms to</td>
<td class="specification-value">NSCopying</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressViewMetro.h<br />M13ProgressViewMetro.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>The layer that the <a href="../Classes/M13ProgressViewMetro.html"><code>M13ProgressViewMetro</code></a> animates.</p>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/highlighted">&nbsp;&nbsp;highlighted</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/successColor">&nbsp;&nbsp;successColor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/failureColor">&nbsp;&nbsp;failureColor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/primaryColor">&nbsp;&nbsp;primaryColor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/secondaryColor">&nbsp;&nbsp;secondaryColor</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/performAction:animated:">&ndash;&nbsp;performAction:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/copy">&ndash;&nbsp;copy</a></code>
</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/failureColor" title="failureColor"></a>
<h3 class="subsubtitle method-title">failureColor</h3>
<div class="method-subsection brief-description">
<p>The color to show on failure.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIColor *failureColor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/highlighted" title="highlighted"></a>
<h3 class="subsubtitle method-title">highlighted</h3>
<div class="method-subsection brief-description">
<p>Wether or not the dot is highlighted. The dot becomes highlighted to show progress.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL highlighted</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/primaryColor" title="primaryColor"></a>
<h3 class="subsubtitle method-title">primaryColor</h3>
<div class="method-subsection brief-description">
<p>The primary color of the dot.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIColor *primaryColor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/secondaryColor" title="secondaryColor"></a>
<h3 class="subsubtitle method-title">secondaryColor</h3>
<div class="method-subsection brief-description">
<p>The secondary color of the dot.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIColor *secondaryColor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/successColor" title="successColor"></a>
<h3 class="subsubtitle method-title">successColor</h3>
<div class="method-subsection brief-description">
<p>The color to show on success.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, retain) UIColor *successColor</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/copy" title="copy"></a>
<h3 class="subsubtitle method-title">copy</h3>
<div class="method-subsection brief-description">
<p>All subclasses must respond to NSCopying.</p>
</div>
<div class="method-subsection method-declaration"><code>- (id)copy</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/performAction:animated:" title="performAction:animated:"></a>
<h3 class="subsubtitle method-title">performAction:animated:</h3>
<div class="method-subsection brief-description">
<p>Perform the given action if defined. Usually showing success or failure.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)performAction:(M13ProgressViewAction)<em>action</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>action</em></dt>
<dd><p>The action to perform.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the change</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,484 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressViewMetroDotPolygon Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressViewMetroDotPolygon Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/numberOfSides">&nbsp;&nbsp;&nbsp;&nbsp;numberOfSides</option>
<option value="//api/name/radius">&nbsp;&nbsp;&nbsp;&nbsp;radius</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/copy">&nbsp;&nbsp;&nbsp;&nbsp;- copy</option>
<option value="//api/name/performAction:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- performAction:animated:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/numberOfSides">numberOfSides</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/radius">radius</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/copy">copy</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/performAction:animated:">performAction:animated:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressViewMetroDotPolygon Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressViewMetroDotPolygon Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value"><a href="../Classes/M13ProgressViewMetroDot.html">M13ProgressViewMetroDot</a> : CALayer</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressViewMetroDotPolygon.h<br />M13ProgressViewMetroDotPolygon.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>A subclass of <a href="../Classes/M13ProgressViewMetroDot.html">M13ProgressViewMetroDot</a>.</p>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<h3 class="subsubtitle task-title">Other Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/numberOfSides">&nbsp;&nbsp;numberOfSides</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/radius">&nbsp;&nbsp;radius</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<h3 class="subsubtitle task-title">Other Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/performAction:animated:">&ndash;&nbsp;performAction:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/copy">&ndash;&nbsp;copy</a></code>
</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/numberOfSides" title="numberOfSides"></a>
<h3 class="subsubtitle method-title">numberOfSides</h3>
<div class="method-subsection brief-description">
<p>The number of sides the polygon has.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) NSUInteger numberOfSides</code></div>
<div class="method-subsection discussion-section">
<h4 class="method-subtitle">Discussion</h4>
<div class="note"><p><strong>Note:</strong> if set less than 3, the polygon will be a circle.</p></div>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetroDotPolygon.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/radius" title="radius"></a>
<h3 class="subsubtitle method-title">radius</h3>
<div class="method-subsection brief-description">
<p>The radius of the polygon.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat radius</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetroDotPolygon.h</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/copy" title="copy"></a>
<h3 class="subsubtitle method-title">copy</h3>
<div class="method-subsection brief-description">
<p>All subclasses must respond to NSCopying.</p>
</div>
<div class="method-subsection method-declaration"><code>- (id)copy</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/performAction:animated:" title="performAction:animated:"></a>
<h3 class="subsubtitle method-title">performAction:animated:</h3>
<div class="method-subsection brief-description">
<p>Perform the given action if defined. Usually showing success or failure.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)performAction:(M13ProgressViewAction)<em>action</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>action</em></dt>
<dd><p>The action to perform.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the change</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewMetro.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,997 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
<title>M13ProgressViewRadiative Class Reference</title>
<meta id="xcode-display" name="xcode-display" content="render"/>
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="../index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="../index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressViewRadiative Class Reference</h1>
</div>
<ul id="headerButtons" role="toolbar">
<li id="toc_button">
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
</li>
<li id="jumpto_button" role="navigation">
<select id="jumpTo">
<option value="top">Jump To&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/animationFromValue">&nbsp;&nbsp;&nbsp;&nbsp;animationFromValue</option>
<option value="//api/name/animationStartTime">&nbsp;&nbsp;&nbsp;&nbsp;animationStartTime</option>
<option value="//api/name/animationToValue">&nbsp;&nbsp;&nbsp;&nbsp;animationToValue</option>
<option value="//api/name/displayLink">&nbsp;&nbsp;&nbsp;&nbsp;displayLink</option>
<option value="//api/name/numberOfRipples">&nbsp;&nbsp;&nbsp;&nbsp;numberOfRipples</option>
<option value="//api/name/originationPoint">&nbsp;&nbsp;&nbsp;&nbsp;originationPoint</option>
<option value="//api/name/progressOutwards">&nbsp;&nbsp;&nbsp;&nbsp;progressOutwards</option>
<option value="//api/name/pulseWidth">&nbsp;&nbsp;&nbsp;&nbsp;pulseWidth</option>
<option value="//api/name/rippleWidth">&nbsp;&nbsp;&nbsp;&nbsp;rippleWidth</option>
<option value="//api/name/ripplesRadius">&nbsp;&nbsp;&nbsp;&nbsp;ripplesRadius</option>
<option value="//api/name/shape">&nbsp;&nbsp;&nbsp;&nbsp;shape</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/setIndeterminate:">&nbsp;&nbsp;&nbsp;&nbsp;- setIndeterminate:</option>
<option value="//api/name/setPrimaryColor:">&nbsp;&nbsp;&nbsp;&nbsp;- setPrimaryColor:</option>
<option value="//api/name/setProgress:animated:">&nbsp;&nbsp;&nbsp;&nbsp;- setProgress:animated:</option>
<option value="//api/name/setSecondaryColor:">&nbsp;&nbsp;&nbsp;&nbsp;- setSecondaryColor:</option>
</select>
</li>
</ul>
</header>
<nav id="tocContainer" class="isShowingTOC">
<ul id="toc" role="tree">
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Appearance">Appearance</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#task_Extension Methods">Extension Methods</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationFromValue">animationFromValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationStartTime">animationStartTime</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/animationToValue">animationToValue</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/displayLink">displayLink</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/numberOfRipples">numberOfRipples</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/originationPoint">originationPoint</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/progressOutwards">progressOutwards</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/pulseWidth">pulseWidth</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/rippleWidth">rippleWidth</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/ripplesRadius">ripplesRadius</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/shape">shape</a></span></li>
</ul></li>
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setIndeterminate:">setIndeterminate:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setPrimaryColor:">setPrimaryColor:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setProgress:animated:">setProgress:animated:</a></span></li>
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/setSecondaryColor:">setSecondaryColor:</a></span></li>
</ul></li>
</ul>
</nav>
<article>
<div id="contents" class="isShowingTOC" role="main">
<a title="M13ProgressViewRadiative Class Reference" name="top"></a>
<div class="main-navigation navigation-top">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressViewRadiative Class Reference</h1>
</div>
</div>
<div id="container">
<div class="section section-specification"><table cellspacing="0"><tbody>
<tr>
<td class="specification-title">Inherits from</td>
<td class="specification-value"><a href="../Classes/M13ProgressView.html">M13ProgressView</a> : UIView</td>
</tr><tr>
<td class="specification-title">Declared in</td>
<td class="specification-value">M13ProgressViewRadiative.h<br />M13ProgressViewRadiative.m</td>
</tr>
</tbody></table></div>
<div class="section section-overview">
<a title="Overview" name="overview"></a>
<h2 class="subtitle subtitle-overview">Overview</h2>
<p>A progress view that displays progress via &ldquo;Radiative&rdquo; rings around a central point.</p>
</div>
<div class="section section-tasks">
<a title="Tasks" name="tasks"></a>
<h2 class="subtitle subtitle-tasks">Tasks</h2>
<a title="Appearance" name="task_Appearance"></a>
<h3 class="subsubtitle task-title">Appearance</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/originationPoint">&nbsp;&nbsp;originationPoint</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/ripplesRadius">&nbsp;&nbsp;ripplesRadius</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/rippleWidth">&nbsp;&nbsp;rippleWidth</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/shape">&nbsp;&nbsp;shape</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/numberOfRipples">&nbsp;&nbsp;numberOfRipples</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/pulseWidth">&nbsp;&nbsp;pulseWidth</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/progressOutwards">&nbsp;&nbsp;progressOutwards</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
<h3 class="subsubtitle task-title">Other Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/setPrimaryColor:">&ndash;&nbsp;setPrimaryColor:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setSecondaryColor:">&ndash;&nbsp;setSecondaryColor:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setProgress:animated:">&ndash;&nbsp;setProgress:animated:</a></code>
</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/setIndeterminate:">&ndash;&nbsp;setIndeterminate:</a></code>
</span>
</li>
</ul>
<a title="Extension Methods" name="task_Extension Methods"></a>
<h3 class="subsubtitle task-title">Extension Methods</h3>
<ul class="task-list">
<li>
<span class="tooltip">
<code><a href="#//api/name/animationFromValue">&nbsp;&nbsp;animationFromValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationToValue">&nbsp;&nbsp;animationToValue</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/animationStartTime">&nbsp;&nbsp;animationStartTime</a></code>
</span>
<span class="task-item-suffix">property</span>
</li><li>
<span class="tooltip">
<code><a href="#//api/name/displayLink">&nbsp;&nbsp;displayLink</a></code>
</span>
<span class="task-item-suffix">property</span>
</li>
</ul>
</div>
<div class="section section-methods">
<a title="Properties" name="properties"></a>
<h2 class="subtitle subtitle-methods">Properties</h2>
<div class="section-method">
<a name="//api/name/animationFromValue" title="animationFromValue"></a>
<h3 class="subsubtitle method-title">animationFromValue</h3>
<div class="method-subsection brief-description">
<p>The start progress for the progress animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationFromValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationStartTime" title="animationStartTime"></a>
<h3 class="subsubtitle method-title">animationStartTime</h3>
<div class="method-subsection brief-description">
<p>The start time interval for the animaiton.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CFTimeInterval animationStartTime</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/animationToValue" title="animationToValue"></a>
<h3 class="subsubtitle method-title">animationToValue</h3>
<div class="method-subsection brief-description">
<p>The end progress for the progress animation.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat animationToValue</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/displayLink" title="displayLink"></a>
<h3 class="subsubtitle method-title">displayLink</h3>
<div class="method-subsection brief-description">
<p>Link to the display to keep animations in sync.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, strong) CADisplayLink *displayLink</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.m</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/numberOfRipples" title="numberOfRipples"></a>
<h3 class="subsubtitle method-title">numberOfRipples</h3>
<div class="method-subsection brief-description">
<p>The number of ripples the progress view displays.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) NSUInteger numberOfRipples</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/originationPoint" title="originationPoint"></a>
<h3 class="subsubtitle method-title">originationPoint</h3>
<div class="method-subsection brief-description">
<p>The point where the wave fronts originate from. The point is defined in percentages, top left being {0, 0}, and the bottom right being {1, 1}.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGPoint originationPoint</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/progressOutwards" title="progressOutwards"></a>
<h3 class="subsubtitle method-title">progressOutwards</h3>
<div class="method-subsection brief-description">
<p>The direction of the progress. If set to yes, the progress will be outward, of set to no, it will be inwards.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL progressOutwards</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/pulseWidth" title="pulseWidth"></a>
<h3 class="subsubtitle method-title">pulseWidth</h3>
<div class="method-subsection brief-description">
<p>The number of ripples the indeterminate pulse animation is.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) NSUInteger pulseWidth</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/rippleWidth" title="rippleWidth"></a>
<h3 class="subsubtitle method-title">rippleWidth</h3>
<div class="method-subsection brief-description">
<p>The width of the ripples.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat rippleWidth</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/ripplesRadius" title="ripplesRadius"></a>
<h3 class="subsubtitle method-title">ripplesRadius</h3>
<div class="method-subsection brief-description">
<p>The distance of the last ripple from the origination point.</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) CGFloat ripplesRadius</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/shape" title="shape"></a>
<h3 class="subsubtitle method-title">shape</h3>
<div class="method-subsection brief-description">
<p>The shape of the radiative ripples</p>
</div>
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) M13ProgressViewRadiativeShape shape</code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressViewRadiative.h</code><br />
</div>
</div>
</div>
<div class="section section-methods">
<a title="Instance Methods" name="instance_methods"></a>
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
<div class="section-method">
<a name="//api/name/setIndeterminate:" title="setIndeterminate:"></a>
<h3 class="subsubtitle method-title">setIndeterminate:</h3>
<div class="method-subsection brief-description">
<p>Wether or not the <a href="#//api/name/progress">progress</a> view is indeterminate.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setIndeterminate:(BOOL)<em>indeterminate</em></code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setPrimaryColor:" title="setPrimaryColor:"></a>
<h3 class="subsubtitle method-title">setPrimaryColor:</h3>
<div class="method-subsection brief-description">
<p>The primary color of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setPrimaryColor:(UIColor *)<em>primaryColor</em></code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setProgress:animated:" title="setProgress:animated:"></a>
<h3 class="subsubtitle method-title">setProgress:animated:</h3>
<div class="method-subsection brief-description">
<p>Set the <a href="#//api/name/progress">progress</a> of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setProgress:(CGFloat)<em>progress</em> animated:(BOOL)<em>animated</em></code></div>
<div class="method-subsection arguments-section parameters">
<h4 class="method-subtitle parameter-title">Parameters</h4>
<dl class="argument-def parameter-def">
<dt><em>progress</em></dt>
<dd><p>The <a href="#//api/name/progress">progress</a> to show on the <a href="#//api/name/progress">progress</a> view.</p></dd>
</dl>
<dl class="argument-def parameter-def">
<dt><em>animated</em></dt>
<dd><p>Wether or not to animate the <a href="#//api/name/progress">progress</a> change.</p></dd>
</dl>
</div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
<div class="section-method">
<a name="//api/name/setSecondaryColor:" title="setSecondaryColor:"></a>
<h3 class="subsubtitle method-title">setSecondaryColor:</h3>
<div class="method-subsection brief-description">
<p>The secondary color of the <code>M13ProgressView</code>.</p>
</div>
<div class="method-subsection method-declaration"><code>- (void)setSecondaryColor:(UIColor *)<em>secondaryColor</em></code></div>
<div class="method-subsection declared-in-section">
<h4 class="method-subtitle">Declared In</h4>
<code class="declared-in-ref">M13ProgressView.h</code><br />
</div>
</div>
</div>
</div>
<div class="main-navigation navigation-bottom">
<ul>
<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
<script type="text/javascript">
function jumpToChange()
{
window.location.hash = this.options[this.selectedIndex].value;
}
function toggleTOC()
{
var contents = document.getElementById('contents');
var tocContainer = document.getElementById('tocContainer');
if (this.getAttribute('class') == 'open')
{
this.setAttribute('class', '');
contents.setAttribute('class', '');
tocContainer.setAttribute('class', '');
window.name = "hideTOC";
}
else
{
this.setAttribute('class', 'open');
contents.setAttribute('class', 'isShowingTOC');
tocContainer.setAttribute('class', 'isShowingTOC');
window.name = "";
}
return false;
}
function toggleTOCEntryChildren(e)
{
e.stopPropagation();
var currentClass = this.getAttribute('class');
if (currentClass == 'children') {
this.setAttribute('class', 'children open');
}
else if (currentClass == 'children open') {
this.setAttribute('class', 'children');
}
return false;
}
function tocEntryClick(e)
{
e.stopPropagation();
return true;
}
function init()
{
var selectElement = document.getElementById('jumpTo');
selectElement.addEventListener('change', jumpToChange, false);
var tocButton = document.getElementById('table_of_contents');
tocButton.addEventListener('click', toggleTOC, false);
var taskTreeItem = document.getElementById('task_treeitem');
if (taskTreeItem.getElementsByTagName('li').length > 0)
{
taskTreeItem.setAttribute('class', 'children');
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
}
var tocList = document.getElementById('toc');
var tocEntries = tocList.getElementsByTagName('li');
for (var i = 0; i < tocEntries.length; i++) {
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
}
var tocLinks = tocList.getElementsByTagName('a');
for (var i = 0; i < tocLinks.length; i++) {
tocLinks[i].addEventListener('click', tocEntryClick, false);
}
if (window.name == "hideTOC") {
toggleTOC.call(tocButton);
}
}
window.onload = init;
// If showing in Xcode, hide the TOC and Header
if (navigator.userAgent.match(/xcode/i)) {
document.getElementById("contents").className = "hideInXcode"
document.getElementById("tocContainer").className = "hideInXcode"
document.getElementById("top_header").className = "hideInXcode"
}
</script>
</body>
</html>
@@ -1,615 +0,0 @@
body {
font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
font-size: 13px;
}
code {
font-family: Courier, Consolas, monospace;
font-size: 13px;
color: #666;
}
pre {
font-family: Courier, Consolas, monospace;
font-size: 13px;
line-height: 18px;
tab-interval: 0.5em;
border: 1px solid #C7CFD5;
background-color: #F1F5F9;
color: #666;
padding: 0.3em 1em;
}
ul {
list-style-type: square;
}
li {
margin-bottom: 10px;
}
a, a code {
text-decoration: none;
color: #36C;
}
a:hover, a:hover code {
text-decoration: underline;
color: #36C;
}
h2 {
border-bottom: 1px solid #8391A8;
color: #3C4C6C;
font-size: 187%;
font-weight: normal;
margin-top: 1.75em;
padding-bottom: 2px;
}
table {
margin-bottom: 4em;
border-collapse:collapse;
vertical-align: middle;
}
td {
border: 1px solid #9BB3CD;
padding: .667em;
font-size: 100%;
}
th {
border: 1px solid #9BB3CD;
padding: .3em .667em .3em .667em;
background: #93A5BB;
font-size: 103%;
font-weight: bold;
color: white;
text-align: left;
}
/* @group Common page elements */
#top_header {
height: 91px;
left: 0;
min-width: 598px;
position: absolute;
right: 0;
top: 0;
z-index: 900;
}
#footer {
clear: both;
padding-top: 20px;
text-align: center;
}
#contents, #overview_contents {
-webkit-overflow-scrolling: touch;
border-top: 1px solid #A9A9A9;
position: absolute;
top: 90px;
left: 0;
right: 0;
bottom: 0;
overflow-x: hidden;
overflow-y: auto;
padding-left: 2em;
padding-right: 2em;
padding-top: 1em;
min-width: 550px;
}
#contents.isShowingTOC {
left: 230px;
min-width: 320px;
}
.copyright {
font-size: 12px;
}
.generator {
font-size: 11px;
}
.main-navigation ul li {
display: inline;
margin-left: 15px;
list-style: none;
}
.navigation-top {
clear: both;
float: right;
}
.navigation-bottom {
clear: both;
float: right;
margin-top: 20px;
margin-bottom: -10px;
}
.open > .disclosure {
background-image: url("../img/disclosure_open.png");
}
.disclosure {
background: url("../img/disclosure.png") no-repeat scroll 0 0;
}
.disclosure, .nodisclosure {
display: inline-block;
height: 8px;
margin-right: 5px;
position: relative;
width: 9px;
}
/* @end */
/* @group Header */
#top_header #library {
background: url("../img/library_background.png") repeat-x 0 0 #485E78;
background-color: #ccc;
height: 35px;
font-size: 115%;
}
#top_header #library #libraryTitle {
color: #FFFFFF;
margin-left: 15px;
text-shadow: 0 -1px 0 #485E78;
top: 8px;
position: absolute;
}
#libraryTitle {
left: 0;
}
#top_header #library #developerHome {
color: #92979E;
right: 15px;
top: 8px;
position: absolute;
}
#top_header #library a:hover {
text-decoration: none;
}
#top_header #title {
background: url("../img/title_background.png") repeat-x 0 0 #8A98A9;
border-bottom: 1px solid #757575;
height: 25px;
overflow: hidden;
}
#top_header h1 {
font-size: 105%;
font-weight: normal;
margin: 0;
padding: 3px 0 2px;
text-align: center;
/*text-shadow: 0 1px 0 #D5D5D5;*/
white-space: nowrap;
}
#headerButtons {
background-color: #D8D8D8;
background-image: url("../img/button_bar_background.png");
border-bottom: 0px solid #EDEDED;
border-top: 0px solid #a8a8a8;
font-size: 8pt;
height: 28px;
left: 0;
list-style: none outside none;
margin: 0;
overflow: hidden;
padding: 0;
position: absolute;
right: 0;
top: 61px;
}
#headerButtons li {
background-repeat: no-repeat;
display: inline;
margin-top: 0;
margin-bottom: 0;
padding: 0;
}
#toc_button button {
background-color: #EBEEF1;
border-color: #ACACAC;
border-style: none solid none none;
border-width: 0 1px 0 0;
height: 28px;
margin: 0;
padding-left: 30px;
text-align: left;
width: 230px;
}
li#jumpto_button {
left: 230px;
margin-left: 0;
position: absolute;
}
li#jumpto_button select {
height: 22px;
margin: 5px 2px 0 10px;
max-width: 300px;
}
/* @end */
/* @group Table of contents */
#tocContainer.isShowingTOC {
border-right: 1px solid #ACACAC;
display: block;
overflow-x: hidden;
overflow-y: auto;
padding: 0;
}
#tocContainer {
background-color: #EBEEF1;
border-top: 1px solid #ACACAC;
bottom: 0;
display: none;
left: 0;
overflow: hidden;
position: absolute;
top: 90px;
width: 229px;
}
#tocContainer > ul#toc {
font-size: 11px;
margin: 0;
padding: 12px 0 18px;
width: 209px;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
#tocContainer > ul#toc > li {
margin: 0;
padding: 0 0 7px 30px;
text-indent: -15px;
}
#tocContainer > ul#toc > li > .sectionName a {
color: #000000;
font-weight: bold;
}
#tocContainer > ul#toc > li > .sectionName a:hover {
text-decoration: none;
}
#tocContainer > ul#toc li.children > ul {
display: none;
height: 0;
}
#tocContainer > ul#toc > li > ul {
margin: 0;
padding: 0;
}
#tocContainer > ul#toc > li > ul, ul#toc > li > ul > li {
margin-left: 0;
margin-bottom: 0;
padding-left: 15px;
}
#tocContainer > ul#toc > li ul {
list-style: none;
margin-right: 0;
padding-right: 0;
}
#tocContainer > ul#toc li.children.open > ul {
display: block;
height: auto;
margin-left: -15px;
padding-left: 0;
}
#tocContainer > ul#toc > li > ul, ul#toc > li > ul > li {
margin-left: 0;
padding-left: 15px;
}
#tocContainer li ul li {
margin-top: 0.583em;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
#tocContainer li ul li span.sectionName {
white-space: normal;
}
#tocContainer > ul#toc > li > ul > li > .sectionName a {
font-weight: bold;
}
#tocContainer > ul#toc > li > ul a {
color: #4F4F4F;
}
/* @end */
/* @group Index formatting */
.index-title {
font-size: 13px;
font-weight: normal;
}
.index-column {
float: left;
width: 30%;
min-width: 200px;
font-size: 11px;
}
.index-column ul {
margin: 8px 0 0 0;
padding: 0;
list-style: none;
}
.index-column ul li {
margin: 0 0 3px 0;
padding: 0;
}
.hierarchy-column {
min-width: 400px;
}
.hierarchy-column ul {
margin: 3px 0 0 15px;
}
.hierarchy-column ul li {
list-style-type: square;
}
/* @end */
/* @group Common formatting elements */
.title {
font-weight: normal;
font-size: 215%;
margin-top:0;
}
.subtitle {
font-weight: normal;
font-size: 180%;
color: #3C4C6C;
border-bottom: 1px solid #5088C5;
}
.subsubtitle {
font-weight: normal;
font-size: 145%;
height: 0.7em;
}
.note {
border: 1px solid #5088C5;
background-color: white;
margin: 1.667em 0 1.75em 0;
padding: 0 .667em .083em .750em;
}
.warning {
border: 1px solid #5088C5;
background-color: #F0F3F7;
margin-bottom: 0.5em;
padding: 0.3em 0.8em;
}
.bug {
border: 1px solid #000;
background-color: #ffffcc;
margin-bottom: 0.5em;
padding: 0.3em 0.8em;
}
.deprecated {
color: #F60425;
}
/* @end */
/* @group Common layout */
.section {
margin-top: 3em;
}
/* @end */
/* @group Object specification section */
.section-specification {
margin-left: 2.5em;
margin-right: 2.5em;
font-size: 12px;
}
.section-specification table {
margin-bottom: 0em;
border-top: 1px solid #d6e0e5;
}
.section-specification td {
vertical-align: top;
border-bottom: 1px solid #d6e0e5;
border-left-width: 0px;
border-right-width: 0px;
border-top-width: 0px;
padding: .6em;
}
.section-specification .specification-title {
font-weight: bold;
}
/* @end */
/* @group Tasks section */
.task-list {
list-style-type: none;
padding-left: 0px;
}
.task-list li {
margin-bottom: 3px;
}
.task-item-suffix {
color: #996;
font-size: 12px;
font-style: italic;
margin-left: 0.5em;
}
span.tooltip span.tooltip {
font-size: 1.0em;
display: none;
padding: 0.3em;
border: 1px solid #aaa;
background-color: #fdfec8;
color: #000;
text-align: left;
}
span.tooltip:hover span.tooltip {
display: block;
position: absolute;
margin-left: 2em;
}
/* @end */
/* @group Method section */
.section-method {
margin-top: 2.3em;
}
.method-title {
margin-bottom: 1.5em;
}
.method-subtitle {
margin-top: 0.7em;
margin-bottom: 0.2em;
}
.method-subsection p {
margin-top: 0.4em;
margin-bottom: 0.8em;
}
.method-declaration {
margin-top:1.182em;
margin-bottom:.909em;
}
.method-declaration code {
font:14px Courier, Consolas, monospace;
color:#000;
}
.declaration {
color: #000;
}
.termdef {
margin-bottom: 10px;
margin-left: 0px;
margin-right: 0px;
margin-top: 0px;
}
.termdef dt {
margin: 0;
padding: 0;
}
.termdef dd {
margin-bottom: 6px;
margin-left: 16px;
margin-right: 0px;
margin-top: 1px;
}
.termdef dd p {
margin-bottom: 6px;
margin-left: 0px;
margin-right: 0px;
margin-top: -1px;
}
.argument-def {
margin-top: 0.3em;
margin-bottom: 0.3em;
}
.argument-def dd {
margin-left: 1.25em;
}
.see-also-section ul {
list-style-type: none;
padding-left: 0px;
margin-top: 0;
}
.see-also-section li {
margin-bottom: 3px;
}
.declared-in-ref {
color: #666;
}
#tocContainer.hideInXcode {
display: none;
border: 0px solid black;
}
#top_header.hideInXcode {
display: none;
}
#contents.hideInXcode {
border: 0px solid black;
top: 0px;
left: 0px;
}
/* @end */
@@ -1,22 +0,0 @@
header {
display: none;
}
div.main-navigation, div.navigation-top {
display: none;
}
div#overview_contents, div#contents.isShowingTOC, div#contents {
overflow: visible;
position: relative;
top: 0px;
border: none;
left: 0;
}
#tocContainer.isShowingTOC {
display: none;
}
nav {
display: none;
}
@@ -1,135 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>M13ProgressSuite Hierarchy</title>
<link rel="stylesheet" type="text/css" href="css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressSuite Hierarchy</h1>
</div>
<ul id="headerButtons" role="toolbar"></ul>
</header>
<article>
<div id="overview_contents" role="main">
<div class="main-navigation navigation-top">
<a href="index.html">Previous</a>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressSuite Hierarchy</h1>
</div>
</div>
<div id="container">
<div class="index-column hierarchy-column">
<h2 class="index-title">Class Hierarchy</h2>
<ul>
<li>CALayer
<ul>
<li><a href="Classes/M13ProgressViewMetroDot.html">M13ProgressViewMetroDot</a>
<ul>
<li><a href="Classes/M13ProgressViewMetroDotPolygon.html">M13ProgressViewMetroDotPolygon</a></li>
</ul>
</li>
</ul>
</li>
<li>UITextView
<ul>
<li><a href="Classes/M13ProgressConsole.html">M13ProgressConsole</a></li>
</ul>
</li>
<li>UIView
<ul>
<li><a href="Classes/M13ProgressHUD.html">M13ProgressHUD</a></li>
<li><a href="Classes/M13ProgressView.html">M13ProgressView</a>
<ul>
<li><a href="Classes/M13ProgressViewBar.html">M13ProgressViewBar</a></li>
<li><a href="Classes/M13ProgressViewBorderedBar.html">M13ProgressViewBorderedBar</a></li>
<li><a href="Classes/M13ProgressViewFilteredImage.html">M13ProgressViewFilteredImage</a></li>
<li><a href="Classes/M13ProgressViewImage.html">M13ProgressViewImage</a></li>
<li><a href="Classes/M13ProgressViewLetterpress.html">M13ProgressViewLetterpress</a></li>
<li><a href="Classes/M13ProgressViewMetro.html">M13ProgressViewMetro</a></li>
<li><a href="Classes/M13ProgressViewPie.html">M13ProgressViewPie</a></li>
<li><a href="Classes/M13ProgressViewRadiative.html">M13ProgressViewRadiative</a></li>
<li><a href="Classes/M13ProgressViewRing.html">M13ProgressViewRing</a></li>
<li><a href="Classes/M13ProgressViewSegmentedBar.html">M13ProgressViewSegmentedBar</a></li>
<li><a href="Classes/M13ProgressViewSegmentedRing.html">M13ProgressViewSegmentedRing</a></li>
<li><a href="Classes/M13ProgressViewStripedBar.html">M13ProgressViewStripedBar</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="index-column">
<h2 class="index-title">Category References</h2>
<ul>
<li><a href="Categories/UINavigationController+M13ProgressViewBar.html">UINavigationController(M13ProgressViewBar)</a></li>
</ul>
</div>
</div>
<div class="main-navigation navigation-bottom">
<a href="index.html">Previous</a>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

@@ -1,111 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>M13ProgressSuite Reference</title>
<link rel="stylesheet" type="text/css" href="css/styles.css" media="all" />
<link rel="stylesheet" type="text/css" media="print" href="css/stylesPrint.css" />
<meta name="generator" content="appledoc 2.2 (build 961)" />
</head>
<body>
<header id="top_header">
<div id="library" class="hideInXcode">
<h1><a id="libraryTitle" href="index.html">M13ProgressSuite </a></h1>
<a id="developerHome" href="index.html">Marxon13 Productions (Brandon McQuilkin)</a>
</div>
<div id="title" role="banner">
<h1 class="hideInXcode">M13ProgressSuite Reference</h1>
</div>
<ul id="headerButtons" role="toolbar"></ul>
</header>
<article>
<div id="overview_contents" role="main">
<div class="main-navigation navigation-top">
<a href="hierarchy.html">Next</a>
</div>
<div id="header">
<div class="section-header">
<h1 class="title title-header">M13ProgressSuite Reference</h1>
</div>
</div>
<div id="container">
<div class="index-column">
<h2 class="index-title">Class References</h2>
<ul>
<li><a href="Classes/M13ProgressConsole.html">M13ProgressConsole</a></li>
<li><a href="Classes/M13ProgressHUD.html">M13ProgressHUD</a></li>
<li><a href="Classes/M13ProgressView.html">M13ProgressView</a></li>
<li><a href="Classes/M13ProgressViewBar.html">M13ProgressViewBar</a></li>
<li><a href="Classes/M13ProgressViewBorderedBar.html">M13ProgressViewBorderedBar</a></li>
<li><a href="Classes/M13ProgressViewFilteredImage.html">M13ProgressViewFilteredImage</a></li>
<li><a href="Classes/M13ProgressViewImage.html">M13ProgressViewImage</a></li>
<li><a href="Classes/M13ProgressViewLetterpress.html">M13ProgressViewLetterpress</a></li>
<li><a href="Classes/M13ProgressViewMetro.html">M13ProgressViewMetro</a></li>
<li><a href="Classes/M13ProgressViewMetroDot.html">M13ProgressViewMetroDot</a></li>
<li><a href="Classes/M13ProgressViewMetroDotPolygon.html">M13ProgressViewMetroDotPolygon</a></li>
<li><a href="Classes/M13ProgressViewPie.html">M13ProgressViewPie</a></li>
<li><a href="Classes/M13ProgressViewRadiative.html">M13ProgressViewRadiative</a></li>
<li><a href="Classes/M13ProgressViewRing.html">M13ProgressViewRing</a></li>
<li><a href="Classes/M13ProgressViewSegmentedBar.html">M13ProgressViewSegmentedBar</a></li>
<li><a href="Classes/M13ProgressViewSegmentedRing.html">M13ProgressViewSegmentedRing</a></li>
<li><a href="Classes/M13ProgressViewStripedBar.html">M13ProgressViewStripedBar</a></li>
</ul>
</div>
<div class="index-column">
<h2 class="index-title">Category References</h2>
<ul>
<li><a href="Categories/UINavigationController+M13ProgressViewBar.html">UINavigationController(M13ProgressViewBar)</a></li>
</ul>
</div>
</div>
<div class="main-navigation navigation-bottom">
<a href="hierarchy.html">Next</a>
</div>
<div id="footer">
<hr />
<div class="footer-copyright">
<p><span class="copyright">&copy; 2014 Marxon13 Productions (Brandon McQuilkin). All rights reserved. (Last updated: 2014-05-12)</span><br />
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2 (build 961)</a>.</span></p>
</div>
</div>
</div>
</article>
</body>
</html>
@@ -1,645 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<DocSetNodes version="1.0">
<TOC>
<Node type="folder">
<Name>M13ProgressSuite</Name>
<Path>index.html</Path>
<Subnodes>
<Node type="folder">
<Name>Classes</Name>
<Path>index.html</Path>
<Subnodes>
<NodeRef refid="1"/>
<NodeRef refid="2"/>
<NodeRef refid="3"/>
<NodeRef refid="4"/>
<NodeRef refid="5"/>
<NodeRef refid="6"/>
<NodeRef refid="7"/>
<NodeRef refid="8"/>
<NodeRef refid="9"/>
<NodeRef refid="10"/>
<NodeRef refid="11"/>
<NodeRef refid="12"/>
<NodeRef refid="13"/>
<NodeRef refid="14"/>
<NodeRef refid="15"/>
<NodeRef refid="16"/>
<NodeRef refid="17"/>
</Subnodes>
</Node>
<Node>
<Name>Categories</Name>
<Path>index.html</Path>
<Subnodes>
<NodeRef refid="18"/>
</Subnodes>
</Node>
</Subnodes>
</Node>
</TOC>
<Library>
<Node id="1" type="file" documentType="reference">
<Name>M13ProgressConsole</Name>
<Path>Classes/M13ProgressConsole.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressConsole.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressConsole.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressConsole.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressConsole.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="2" type="file" documentType="reference">
<Name>M13ProgressHUD</Name>
<Path>Classes/M13ProgressHUD.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressHUD.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressHUD.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressHUD.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressHUD.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="3" type="file" documentType="reference">
<Name>M13ProgressView</Name>
<Path>Classes/M13ProgressView.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressView.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressView.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressView.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressView.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="4" type="file" documentType="reference">
<Name>M13ProgressViewBar</Name>
<Path>Classes/M13ProgressViewBar.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewBar.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewBar.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewBar.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewBar.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="5" type="file" documentType="reference">
<Name>M13ProgressViewBorderedBar</Name>
<Path>Classes/M13ProgressViewBorderedBar.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewBorderedBar.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewBorderedBar.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewBorderedBar.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewBorderedBar.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="6" type="file" documentType="reference">
<Name>M13ProgressViewFilteredImage</Name>
<Path>Classes/M13ProgressViewFilteredImage.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewFilteredImage.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewFilteredImage.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewFilteredImage.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewFilteredImage.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="7" type="file" documentType="reference">
<Name>M13ProgressViewImage</Name>
<Path>Classes/M13ProgressViewImage.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewImage.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewImage.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewImage.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewImage.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="8" type="file" documentType="reference">
<Name>M13ProgressViewLetterpress</Name>
<Path>Classes/M13ProgressViewLetterpress.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewLetterpress.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewLetterpress.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewLetterpress.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewLetterpress.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="9" type="file" documentType="reference">
<Name>M13ProgressViewMetro</Name>
<Path>Classes/M13ProgressViewMetro.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewMetro.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetro.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetro.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetro.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="10" type="file" documentType="reference">
<Name>M13ProgressViewMetroDot</Name>
<Path>Classes/M13ProgressViewMetroDot.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDot.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDot.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDot.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDot.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="11" type="file" documentType="reference">
<Name>M13ProgressViewMetroDotPolygon</Name>
<Path>Classes/M13ProgressViewMetroDotPolygon.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDotPolygon.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDotPolygon.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDotPolygon.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewMetroDotPolygon.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="12" type="file" documentType="reference">
<Name>M13ProgressViewPie</Name>
<Path>Classes/M13ProgressViewPie.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewPie.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewPie.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewPie.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewPie.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="13" type="file" documentType="reference">
<Name>M13ProgressViewRadiative</Name>
<Path>Classes/M13ProgressViewRadiative.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewRadiative.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewRadiative.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewRadiative.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewRadiative.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="14" type="file" documentType="reference">
<Name>M13ProgressViewRing</Name>
<Path>Classes/M13ProgressViewRing.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewRing.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewRing.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewRing.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewRing.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="15" type="file" documentType="reference">
<Name>M13ProgressViewSegmentedBar</Name>
<Path>Classes/M13ProgressViewSegmentedBar.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedBar.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedBar.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedBar.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedBar.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="16" type="file" documentType="reference">
<Name>M13ProgressViewSegmentedRing</Name>
<Path>Classes/M13ProgressViewSegmentedRing.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedRing.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedRing.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedRing.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewSegmentedRing.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="17" type="file" documentType="reference">
<Name>M13ProgressViewStripedBar</Name>
<Path>Classes/M13ProgressViewStripedBar.html</Path>
<Subnodes>
<Node type="section">
<Path>Classes/M13ProgressViewStripedBar.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewStripedBar.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewStripedBar.html</Path>
<Name>Properties</Name>
<Anchor>properties</Anchor>
</Node>
<Node type="section">
<Path>Classes/M13ProgressViewStripedBar.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
<Node id="18" type="file" documentType="reference">
<Name>UINavigationController(M13ProgressViewBar)</Name>
<Path>Categories/UINavigationController+M13ProgressViewBar.html</Path>
<Subnodes>
<Node type="section">
<Path>Categories/UINavigationController+M13ProgressViewBar.html</Path>
<Name>Overview</Name>
<Anchor>overview</Anchor>
</Node>
<Node type="section">
<Path>Categories/UINavigationController+M13ProgressViewBar.html</Path>
<Name>Tasks</Name>
<Anchor>tasks</Anchor>
</Node>
<Node type="section">
<Path>Categories/UINavigationController+M13ProgressViewBar.html</Path>
<Name>Instance Methods</Name>
<Anchor>instance_methods</Anchor>
</Node>
</Subnodes>
</Node>
</Library>
</DocSetNodes>
@@ -1,404 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressConsole.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressConsole</TokenIdentifier>
<Abstract type="html">A progress view that shows progress in the style of terminal.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setProgress:</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/progress</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/progress</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/indeterminate</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/indeterminate</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setProgressType:</TokenIdentifier>
<Abstract type="html">Show progress at the end of each line.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressConsoleProgressType progressType</Declaration>
<Anchor>//api/name/progressType</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/progressType</TokenIdentifier>
<Abstract type="html">Show progress at the end of each line.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressConsoleProgressType progressType</Declaration>
<Anchor>//api/name/progressType</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/progressType</TokenIdentifier>
<Abstract type="html">Show progress at the end of each line.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressConsoleProgressType progressType</Declaration>
<Anchor>//api/name/progressType</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setMaskType:</TokenIdentifier>
<Abstract type="html">The background type of the console.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressConsoleMaskType maskType</Declaration>
<Anchor>//api/name/maskType</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/maskType</TokenIdentifier>
<Abstract type="html">The background type of the console.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressConsoleMaskType maskType</Declaration>
<Anchor>//api/name/maskType</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/maskType</TokenIdentifier>
<Abstract type="html">The background type of the console.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressConsoleMaskType maskType</Declaration>
<Anchor>//api/name/maskType</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setMaskColor:</TokenIdentifier>
<Abstract type="html">The color of the mask if set to solid color.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *maskColor</Declaration>
<Anchor>//api/name/maskColor</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/maskColor</TokenIdentifier>
<Abstract type="html">The color of the mask if set to solid color.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *maskColor</Declaration>
<Anchor>//api/name/maskColor</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/maskColor</TokenIdentifier>
<Abstract type="html">The color of the mask if set to solid color.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *maskColor</Declaration>
<Anchor>//api/name/maskColor</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setShowCursor:</TokenIdentifier>
<Abstract type="html">Wether or not to show the cursor.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showCursor</Declaration>
<Anchor>//api/name/showCursor</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/showCursor</TokenIdentifier>
<Abstract type="html">Wether or not to show the cursor.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showCursor</Declaration>
<Anchor>//api/name/showCursor</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/showCursor</TokenIdentifier>
<Abstract type="html">Wether or not to show the cursor.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showCursor</Declaration>
<Anchor>//api/name/showCursor</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setPrefix:</TokenIdentifier>
<Abstract type="html">The prefix string for each line.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSString *prefix</Declaration>
<Anchor>//api/name/prefix</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/prefix</TokenIdentifier>
<Abstract type="html">The prefix string for each line.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSString *prefix</Declaration>
<Anchor>//api/name/prefix</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/prefix</TokenIdentifier>
<Abstract type="html">The prefix string for each line.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSString *prefix</Declaration>
<Anchor>//api/name/prefix</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setLines:</TokenIdentifier>
<Abstract type="html">The array containing all the lines displyed.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *lines</Declaration>
<Anchor>//api/name/lines</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/lines</TokenIdentifier>
<Abstract type="html">The array containing all the lines displyed.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *lines</Declaration>
<Anchor>//api/name/lines</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/lines</TokenIdentifier>
<Abstract type="html">The array containing all the lines displyed.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *lines</Declaration>
<Anchor>//api/name/lines</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setAnimationDuration:</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/animationDuration</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressConsole/animationDuration</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setProgress:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the current line.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/setCurrentLine:</TokenIdentifier>
<Abstract type="html">Set the text of the current line.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>- (void)setCurrentLine:(NSString *)currentLine</Declaration>
<Parameters>
<Parameter>
<Name>currentLine</Name>
<Abstract type="html">The string to replace the current line with.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setCurrentLine:</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/addNewLineWithString:</TokenIdentifier>
<Abstract type="html">Add a new line with the given text.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>- (void)addNewLineWithString:(NSString *)newLine</Declaration>
<Parameters>
<Parameter>
<Name>newLine</Name>
<Abstract type="html">The text to start a new line with.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/addNewLineWithString:</Anchor>
<NodeRef refid="1"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressConsole/clear</TokenIdentifier>
<Abstract type="html">Clears the console.</Abstract>
<DeclaredIn>M13ProgressConsole.h</DeclaredIn>
<Declaration>- (void)clear</Declaration>
<Anchor>//api/name/clear</Anchor>
<NodeRef refid="1"/>
</Token>
</File>
</Tokens>
@@ -1,229 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewMetroDot.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewMetroDot</TokenIdentifier>
<Abstract type="html">The layer that the M13ProgressViewMetro animates.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/setHighlighted:</TokenIdentifier>
<Abstract type="html">Wether or not the dot is highlighted. The dot becomes highlighted to show progress.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL highlighted</Declaration>
<Anchor>//api/name/highlighted</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/highlighted</TokenIdentifier>
<Abstract type="html">Wether or not the dot is highlighted. The dot becomes highlighted to show progress.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL highlighted</Declaration>
<Anchor>//api/name/highlighted</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetroDot/highlighted</TokenIdentifier>
<Abstract type="html">Wether or not the dot is highlighted. The dot becomes highlighted to show progress.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL highlighted</Declaration>
<Anchor>//api/name/highlighted</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/setSuccessColor:</TokenIdentifier>
<Abstract type="html">The color to show on success.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/successColor</TokenIdentifier>
<Abstract type="html">The color to show on success.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetroDot/successColor</TokenIdentifier>
<Abstract type="html">The color to show on success.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/setFailureColor:</TokenIdentifier>
<Abstract type="html">The color to show on failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/failureColor</TokenIdentifier>
<Abstract type="html">The color to show on failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetroDot/failureColor</TokenIdentifier>
<Abstract type="html">The color to show on failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the dot.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/primaryColor</TokenIdentifier>
<Abstract type="html">The primary color of the dot.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetroDot/primaryColor</TokenIdentifier>
<Abstract type="html">The primary color of the dot.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the dot.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/secondaryColor</TokenIdentifier>
<Abstract type="html">The secondary color of the dot.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetroDot/secondaryColor</TokenIdentifier>
<Abstract type="html">The secondary color of the dot.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="10"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDot/copy</TokenIdentifier>
<Abstract type="html">All subclasses must respond to NSCopying.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>- (id)copy</Declaration>
<Anchor>//api/name/copy</Anchor>
<NodeRef refid="10"/>
</Token>
</File>
</Tokens>
@@ -1,121 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewMetroDotPolygon.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewMetroDotPolygon</TokenIdentifier>
<Abstract type="html">A subclass of M13ProgressViewMetroDot.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.h</DeclaredIn>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDotPolygon/setNumberOfSides:</TokenIdentifier>
<Abstract type="html">The number of sides the polygon has.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfSides</Declaration>
<Anchor>//api/name/numberOfSides</Anchor>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDotPolygon/numberOfSides</TokenIdentifier>
<Abstract type="html">The number of sides the polygon has.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfSides</Declaration>
<Anchor>//api/name/numberOfSides</Anchor>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetroDotPolygon/numberOfSides</TokenIdentifier>
<Abstract type="html">The number of sides the polygon has.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfSides</Declaration>
<Anchor>//api/name/numberOfSides</Anchor>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDotPolygon/setRadius:</TokenIdentifier>
<Abstract type="html">The radius of the polygon.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat radius</Declaration>
<Anchor>//api/name/radius</Anchor>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDotPolygon/radius</TokenIdentifier>
<Abstract type="html">The radius of the polygon.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat radius</Declaration>
<Anchor>//api/name/radius</Anchor>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetroDotPolygon/radius</TokenIdentifier>
<Abstract type="html">The radius of the polygon.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat radius</Declaration>
<Anchor>//api/name/radius</Anchor>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDotPolygon/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="11"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetroDotPolygon/copy</TokenIdentifier>
<Abstract type="html">All subclasses must respond to NSCopying.</Abstract>
<DeclaredIn>M13ProgressViewMetroDotPolygon.m</DeclaredIn>
<Declaration>- (id)copy</Declaration>
<Anchor>//api/name/copy</Anchor>
<NodeRef refid="11"/>
</Token>
</File>
</Tokens>
@@ -1,489 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewPie.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewPie</TokenIdentifier>
<Abstract type="html">A progress view that shows progress with a pie chart.</Abstract>
<DeclaredIn>M13ProgressViewPie.h</DeclaredIn>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setBackgroundRingWidth:</TokenIdentifier>
<Abstract type="html">The thickness of the border around the pie.</Abstract>
<DeclaredIn>M13ProgressViewPie.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat backgroundRingWidth</Declaration>
<Anchor>//api/name/backgroundRingWidth</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/backgroundRingWidth</TokenIdentifier>
<Abstract type="html">The thickness of the border around the pie.</Abstract>
<DeclaredIn>M13ProgressViewPie.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat backgroundRingWidth</Declaration>
<Anchor>//api/name/backgroundRingWidth</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/backgroundRingWidth</TokenIdentifier>
<Abstract type="html">The thickness of the border around the pie.</Abstract>
<DeclaredIn>M13ProgressViewPie.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat backgroundRingWidth</Declaration>
<Anchor>//api/name/backgroundRingWidth</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setProgress:</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setProgressLayer:</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setBackgroundLayer:</TokenIdentifier>
<Abstract type="html">The layer that the background and indeterminate progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background and indeterminate progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background and indeterminate progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setIconLayer:</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/iconLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/iconLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setIndeterminateLayer:</TokenIdentifier>
<Abstract type="html">The layer that is used to display the indeterminate view.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to display the indeterminate view.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to display the indeterminate view.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/setCurrentAction:</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewPie/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="12"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewPie/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewPie.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="12"/>
</Token>
</File>
</Tokens>
@@ -1,469 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewRadiative.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewRadiative</TokenIdentifier>
<Abstract type="html">A progress view that displays progress via &quot;Radiative&quot; rings around a central point.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setOriginationPoint:</TokenIdentifier>
<Abstract type="html">The point where the wave fronts originate from. The point is defined in percentages, top left being {0, 0}, and the bottom right being {1, 1}.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint originationPoint</Declaration>
<Anchor>//api/name/originationPoint</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/originationPoint</TokenIdentifier>
<Abstract type="html">The point where the wave fronts originate from. The point is defined in percentages, top left being {0, 0}, and the bottom right being {1, 1}.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint originationPoint</Declaration>
<Anchor>//api/name/originationPoint</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/originationPoint</TokenIdentifier>
<Abstract type="html">The point where the wave fronts originate from. The point is defined in percentages, top left being {0, 0}, and the bottom right being {1, 1}.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint originationPoint</Declaration>
<Anchor>//api/name/originationPoint</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setRipplesRadius:</TokenIdentifier>
<Abstract type="html">The distance of the last ripple from the origination point.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat ripplesRadius</Declaration>
<Anchor>//api/name/ripplesRadius</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/ripplesRadius</TokenIdentifier>
<Abstract type="html">The distance of the last ripple from the origination point.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat ripplesRadius</Declaration>
<Anchor>//api/name/ripplesRadius</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/ripplesRadius</TokenIdentifier>
<Abstract type="html">The distance of the last ripple from the origination point.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat ripplesRadius</Declaration>
<Anchor>//api/name/ripplesRadius</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setRippleWidth:</TokenIdentifier>
<Abstract type="html">The width of the ripples.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat rippleWidth</Declaration>
<Anchor>//api/name/rippleWidth</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/rippleWidth</TokenIdentifier>
<Abstract type="html">The width of the ripples.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat rippleWidth</Declaration>
<Anchor>//api/name/rippleWidth</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/rippleWidth</TokenIdentifier>
<Abstract type="html">The width of the ripples.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat rippleWidth</Declaration>
<Anchor>//api/name/rippleWidth</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setShape:</TokenIdentifier>
<Abstract type="html">The shape of the radiative ripples</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewRadiativeShape shape</Declaration>
<Anchor>//api/name/shape</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/shape</TokenIdentifier>
<Abstract type="html">The shape of the radiative ripples</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewRadiativeShape shape</Declaration>
<Anchor>//api/name/shape</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/shape</TokenIdentifier>
<Abstract type="html">The shape of the radiative ripples</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewRadiativeShape shape</Declaration>
<Anchor>//api/name/shape</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setNumberOfRipples:</TokenIdentifier>
<Abstract type="html">The number of ripples the progress view displays.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfRipples</Declaration>
<Anchor>//api/name/numberOfRipples</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/numberOfRipples</TokenIdentifier>
<Abstract type="html">The number of ripples the progress view displays.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfRipples</Declaration>
<Anchor>//api/name/numberOfRipples</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/numberOfRipples</TokenIdentifier>
<Abstract type="html">The number of ripples the progress view displays.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfRipples</Declaration>
<Anchor>//api/name/numberOfRipples</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setPulseWidth:</TokenIdentifier>
<Abstract type="html">The number of ripples the indeterminate pulse animation is.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger pulseWidth</Declaration>
<Anchor>//api/name/pulseWidth</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/pulseWidth</TokenIdentifier>
<Abstract type="html">The number of ripples the indeterminate pulse animation is.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger pulseWidth</Declaration>
<Anchor>//api/name/pulseWidth</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/pulseWidth</TokenIdentifier>
<Abstract type="html">The number of ripples the indeterminate pulse animation is.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger pulseWidth</Declaration>
<Anchor>//api/name/pulseWidth</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setProgressOutwards:</TokenIdentifier>
<Abstract type="html">The direction of the progress. If set to yes, the progress will be outward, of set to no, it will be inwards.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL progressOutwards</Declaration>
<Anchor>//api/name/progressOutwards</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/progressOutwards</TokenIdentifier>
<Abstract type="html">The direction of the progress. If set to yes, the progress will be outward, of set to no, it will be inwards.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL progressOutwards</Declaration>
<Anchor>//api/name/progressOutwards</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/progressOutwards</TokenIdentifier>
<Abstract type="html">The direction of the progress. If set to yes, the progress will be outward, of set to no, it will be inwards.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL progressOutwards</Declaration>
<Anchor>//api/name/progressOutwards</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRadiative/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="13"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRadiative/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewRadiative.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="13"/>
</Token>
</File>
</Tokens>
@@ -1,561 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewRing.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewRing</TokenIdentifier>
<Abstract type="html">A progress view stylized similarly to the iOS 7 App store progress view.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setBackgroundRingWidth:</TokenIdentifier>
<Abstract type="html">The width of the background ring in points.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat backgroundRingWidth</Declaration>
<Anchor>//api/name/backgroundRingWidth</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/backgroundRingWidth</TokenIdentifier>
<Abstract type="html">The width of the background ring in points.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat backgroundRingWidth</Declaration>
<Anchor>//api/name/backgroundRingWidth</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/backgroundRingWidth</TokenIdentifier>
<Abstract type="html">The width of the background ring in points.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat backgroundRingWidth</Declaration>
<Anchor>//api/name/backgroundRingWidth</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setProgressRingWidth:</TokenIdentifier>
<Abstract type="html">The width of the progress ring in points.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressRingWidth</Declaration>
<Anchor>//api/name/progressRingWidth</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/progressRingWidth</TokenIdentifier>
<Abstract type="html">The width of the progress ring in points.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressRingWidth</Declaration>
<Anchor>//api/name/progressRingWidth</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/progressRingWidth</TokenIdentifier>
<Abstract type="html">The width of the progress ring in points.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressRingWidth</Declaration>
<Anchor>//api/name/progressRingWidth</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setShowPercentage:</TokenIdentifier>
<Abstract type="html">Wether or not to display a percentage inside the ring.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/showPercentage</TokenIdentifier>
<Abstract type="html">Wether or not to display a percentage inside the ring.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/showPercentage</TokenIdentifier>
<Abstract type="html">Wether or not to display a percentage inside the ring.</Abstract>
<DeclaredIn>M13ProgressViewRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setPercentageFormatter:</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/percentageFormatter</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/percentageFormatter</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setPercentageLabel:</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UILabel *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/percentageLabel</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UILabel *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/percentageLabel</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UILabel *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setProgressLayer:</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setBackgroundLayer:</TokenIdentifier>
<Abstract type="html">The layer that the background and indeterminate progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background and indeterminate progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background and indeterminate progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setIconLayer:</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/iconLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/iconLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/setCurrentAction:</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewRing/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="14"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewRing/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="14"/>
</Token>
</File>
</Tokens>
@@ -1,633 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewSegmentedBar.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewSegmentedBar</TokenIdentifier>
<Abstract type="html">A progress bar that shows progress with discrete values.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setProgressDirection:</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setSegmentShape:</TokenIdentifier>
<Abstract type="html">The shape of the segments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedBarSegmentShape segmentShape</Declaration>
<Anchor>//api/name/segmentShape</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/segmentShape</TokenIdentifier>
<Abstract type="html">The shape of the segments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedBarSegmentShape segmentShape</Declaration>
<Anchor>//api/name/segmentShape</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/segmentShape</TokenIdentifier>
<Abstract type="html">The shape of the segments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedBarSegmentShape segmentShape</Declaration>
<Anchor>//api/name/segmentShape</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setCornerRadius:</TokenIdentifier>
<Abstract type="html">The corner radius of the segment shape if the shape is set to M13ProgressViewSegmentedBarSegmentShapeRoundedRect.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/cornerRadius</TokenIdentifier>
<Abstract type="html">The corner radius of the segment shape if the shape is set to M13ProgressViewSegmentedBarSegmentShapeRoundedRect.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/cornerRadius</TokenIdentifier>
<Abstract type="html">The corner radius of the segment shape if the shape is set to M13ProgressViewSegmentedBarSegmentShapeRoundedRect.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setNumberOfSegments:</TokenIdentifier>
<Abstract type="html">The number of segments to display in the progress view.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSInteger numberOfSegments</Declaration>
<Anchor>//api/name/numberOfSegments</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/numberOfSegments</TokenIdentifier>
<Abstract type="html">The number of segments to display in the progress view.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSInteger numberOfSegments</Declaration>
<Anchor>//api/name/numberOfSegments</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/numberOfSegments</TokenIdentifier>
<Abstract type="html">The number of segments to display in the progress view.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSInteger numberOfSegments</Declaration>
<Anchor>//api/name/numberOfSegments</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setSegmentSeparation:</TokenIdentifier>
<Abstract type="html">The separation between segments in points. Must be less than self.width / numberOfSegments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat segmentSeparation</Declaration>
<Anchor>//api/name/segmentSeparation</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/segmentSeparation</TokenIdentifier>
<Abstract type="html">The separation between segments in points. Must be less than self.width / numberOfSegments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat segmentSeparation</Declaration>
<Anchor>//api/name/segmentSeparation</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/segmentSeparation</TokenIdentifier>
<Abstract type="html">The separation between segments in points. Must be less than self.width / numberOfSegments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat segmentSeparation</Declaration>
<Anchor>//api/name/segmentSeparation</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setSuccessColor:</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/successColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/successColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setFailureColor:</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/failureColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/failureColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setProgress:</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setProgressLayer:</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setBackgroundLayer:</TokenIdentifier>
<Abstract type="html">The layer that the background shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/setCurrentAction:</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="15"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="15"/>
</Token>
</File>
</Tokens>
@@ -1,669 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewSegmentedRing.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewSegmentedRing</TokenIdentifier>
<Abstract type="html">Progress is shown by a ring split up into segments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setProgressRingWidth:</TokenIdentifier>
<Abstract type="html">The width of the progress ring in points.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressRingWidth</Declaration>
<Anchor>//api/name/progressRingWidth</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/progressRingWidth</TokenIdentifier>
<Abstract type="html">The width of the progress ring in points.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressRingWidth</Declaration>
<Anchor>//api/name/progressRingWidth</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/progressRingWidth</TokenIdentifier>
<Abstract type="html">The width of the progress ring in points.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressRingWidth</Declaration>
<Anchor>//api/name/progressRingWidth</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setNumberOfSegments:</TokenIdentifier>
<Abstract type="html">The number of segments to display in the progress view.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSInteger numberOfSegments</Declaration>
<Anchor>//api/name/numberOfSegments</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/numberOfSegments</TokenIdentifier>
<Abstract type="html">The number of segments to display in the progress view.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSInteger numberOfSegments</Declaration>
<Anchor>//api/name/numberOfSegments</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/numberOfSegments</TokenIdentifier>
<Abstract type="html">The number of segments to display in the progress view.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSInteger numberOfSegments</Declaration>
<Anchor>//api/name/numberOfSegments</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setSegmentSeparationAngle:</TokenIdentifier>
<Abstract type="html">The angle of the separation between the segments in radians.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat segmentSeparationAngle</Declaration>
<Anchor>//api/name/segmentSeparationAngle</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/segmentSeparationAngle</TokenIdentifier>
<Abstract type="html">The angle of the separation between the segments in radians.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat segmentSeparationAngle</Declaration>
<Anchor>//api/name/segmentSeparationAngle</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/segmentSeparationAngle</TokenIdentifier>
<Abstract type="html">The angle of the separation between the segments in radians.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat segmentSeparationAngle</Declaration>
<Anchor>//api/name/segmentSeparationAngle</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setSegmentBoundaryType:</TokenIdentifier>
<Abstract type="html">The type of boundary between segments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedRingSegmentBoundaryType segmentBoundaryType</Declaration>
<Anchor>//api/name/segmentBoundaryType</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/segmentBoundaryType</TokenIdentifier>
<Abstract type="html">The type of boundary between segments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedRingSegmentBoundaryType segmentBoundaryType</Declaration>
<Anchor>//api/name/segmentBoundaryType</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/segmentBoundaryType</TokenIdentifier>
<Abstract type="html">The type of boundary between segments.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewSegmentedRingSegmentBoundaryType segmentBoundaryType</Declaration>
<Anchor>//api/name/segmentBoundaryType</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setShowPercentage:</TokenIdentifier>
<Abstract type="html">Wether or not to display a percentage inside the ring.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/showPercentage</TokenIdentifier>
<Abstract type="html">Wether or not to display a percentage inside the ring.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/showPercentage</TokenIdentifier>
<Abstract type="html">Wether or not to display a percentage inside the ring.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setPercentageFormatter:</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/percentageFormatter</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/percentageFormatter</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setPercentageLabel:</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UILabel *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/percentageLabel</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UILabel *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/percentageLabel</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UILabel *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setProgress:</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setProgressLayer:</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that progress is shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setBackgroundLayer:</TokenIdentifier>
<Abstract type="html">The layer that the background shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/backgroundLayer</TokenIdentifier>
<Abstract type="html">The layer that the background shown on.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setIconLayer:</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/iconLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/iconLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to render icons for success or failure.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *iconLayer</Declaration>
<Anchor>//api/name/iconLayer</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/setCurrentAction:</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewSegmentedRing/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="16"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewSegmentedRing/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewSegmentedRing.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="16"/>
</Token>
</File>
</Tokens>
@@ -1,813 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewStripedBar.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewStripedBar</TokenIdentifier>
<Abstract type="html">A progress bar that is striped, and can animate the stripes if desired.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setCornerType:</TokenIdentifier>
<Abstract type="html">The type of corner to display on the bar.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewStripedBarCornerType cornerType</Declaration>
<Anchor>//api/name/cornerType</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/cornerType</TokenIdentifier>
<Abstract type="html">The type of corner to display on the bar.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewStripedBarCornerType cornerType</Declaration>
<Anchor>//api/name/cornerType</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/cornerType</TokenIdentifier>
<Abstract type="html">The type of corner to display on the bar.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewStripedBarCornerType cornerType</Declaration>
<Anchor>//api/name/cornerType</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setCornerRadius:</TokenIdentifier>
<Abstract type="html">The radius of the corner if the corner type is set to rounded rect.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/cornerRadius</TokenIdentifier>
<Abstract type="html">The radius of the corner if the corner type is set to rounded rect.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/cornerRadius</TokenIdentifier>
<Abstract type="html">The radius of the corner if the corner type is set to rounded rect.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setStripeWidth:</TokenIdentifier>
<Abstract type="html">The width of the stripes if shown.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat stripeWidth</Declaration>
<Anchor>//api/name/stripeWidth</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/stripeWidth</TokenIdentifier>
<Abstract type="html">The width of the stripes if shown.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat stripeWidth</Declaration>
<Anchor>//api/name/stripeWidth</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/stripeWidth</TokenIdentifier>
<Abstract type="html">The width of the stripes if shown.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat stripeWidth</Declaration>
<Anchor>//api/name/stripeWidth</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setAnimateStripes:</TokenIdentifier>
<Abstract type="html">Wether or not the stripes are animated.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL animateStripes</Declaration>
<Anchor>//api/name/animateStripes</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/animateStripes</TokenIdentifier>
<Abstract type="html">Wether or not the stripes are animated.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL animateStripes</Declaration>
<Anchor>//api/name/animateStripes</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/animateStripes</TokenIdentifier>
<Abstract type="html">Wether or not the stripes are animated.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL animateStripes</Declaration>
<Anchor>//api/name/animateStripes</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setShowStripes:</TokenIdentifier>
<Abstract type="html">Wether or not to show the stripes.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showStripes</Declaration>
<Anchor>//api/name/showStripes</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/showStripes</TokenIdentifier>
<Abstract type="html">Wether or not to show the stripes.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showStripes</Declaration>
<Anchor>//api/name/showStripes</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/showStripes</TokenIdentifier>
<Abstract type="html">Wether or not to show the stripes.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showStripes</Declaration>
<Anchor>//api/name/showStripes</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setStripeColor:</TokenIdentifier>
<Abstract type="html">The color of the stripes.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *stripeColor</Declaration>
<Anchor>//api/name/stripeColor</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/stripeColor</TokenIdentifier>
<Abstract type="html">The color of the stripes.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *stripeColor</Declaration>
<Anchor>//api/name/stripeColor</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/stripeColor</TokenIdentifier>
<Abstract type="html">The color of the stripes.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *stripeColor</Declaration>
<Anchor>//api/name/stripeColor</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setBorderWidth:</TokenIdentifier>
<Abstract type="html">The width of the border.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat borderWidth</Declaration>
<Anchor>//api/name/borderWidth</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/borderWidth</TokenIdentifier>
<Abstract type="html">The width of the border.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat borderWidth</Declaration>
<Anchor>//api/name/borderWidth</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/borderWidth</TokenIdentifier>
<Abstract type="html">The width of the border.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat borderWidth</Declaration>
<Anchor>//api/name/borderWidth</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setProgress:</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setProgressSuperLayer:</TokenIdentifier>
<Abstract type="html">The layer that contains the progress layer. That also masks the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressSuperLayer</Declaration>
<Anchor>//api/name/progressSuperLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/progressSuperLayer</TokenIdentifier>
<Abstract type="html">The layer that contains the progress layer. That also masks the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressSuperLayer</Declaration>
<Anchor>//api/name/progressSuperLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/progressSuperLayer</TokenIdentifier>
<Abstract type="html">The layer that contains the progress layer. That also masks the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressSuperLayer</Declaration>
<Anchor>//api/name/progressSuperLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setProgressLayer:</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setProgressMaskLayer:</TokenIdentifier>
<Abstract type="html">The layer that masks the stripes of the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressMaskLayer</Declaration>
<Anchor>//api/name/progressMaskLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/progressMaskLayer</TokenIdentifier>
<Abstract type="html">The layer that masks the stripes of the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressMaskLayer</Declaration>
<Anchor>//api/name/progressMaskLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/progressMaskLayer</TokenIdentifier>
<Abstract type="html">The layer that masks the stripes of the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressMaskLayer</Declaration>
<Anchor>//api/name/progressMaskLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setMaskLayer:</TokenIdentifier>
<Abstract type="html">The mask layer for the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *maskLayer</Declaration>
<Anchor>//api/name/maskLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/maskLayer</TokenIdentifier>
<Abstract type="html">The mask layer for the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *maskLayer</Declaration>
<Anchor>//api/name/maskLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/maskLayer</TokenIdentifier>
<Abstract type="html">The mask layer for the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *maskLayer</Declaration>
<Anchor>//api/name/maskLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setBackgroundLayer:</TokenIdentifier>
<Abstract type="html">The background layer that displays the border.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/backgroundLayer</TokenIdentifier>
<Abstract type="html">The background layer that displays the border.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/backgroundLayer</TokenIdentifier>
<Abstract type="html">The background layer that displays the border.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setIndeterminateLayer:</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setCurrentAction:</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/setStripesLayer:</TokenIdentifier>
<Abstract type="html">The stripes layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *stripesLayer</Declaration>
<Anchor>//api/name/stripesLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewStripedBar/stripesLayer</TokenIdentifier>
<Abstract type="html">The stripes layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *stripesLayer</Declaration>
<Anchor>//api/name/stripesLayer</Anchor>
<NodeRef refid="17"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewStripedBar/stripesLayer</TokenIdentifier>
<Abstract type="html">The stripes layer.</Abstract>
<DeclaredIn>M13ProgressViewStripedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *stripesLayer</Declaration>
<Anchor>//api/name/stripesLayer</Anchor>
<NodeRef refid="17"/>
</Token>
</File>
</Tokens>
@@ -1,153 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Categories/UINavigationController+M13ProgressViewBar.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cat/UINavigationController(M13ProgressViewBar)</TokenIdentifier>
<Abstract type="html">A UINavagationController category that adds a progress view to the UINavigationBar.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/showProgress</TokenIdentifier>
<Abstract type="html">Show the progress bar.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)showProgress</Declaration>
<Anchor>//api/name/showProgress</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress to display on the progress bar.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to display as a percentage from 0-1.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/setProgressTitle:</TokenIdentifier>
<Abstract type="html">Set the string to replace the UINavigationBar&apos;s title with while showing progress. Send nil to reset the title.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)setProgressTitle:(NSString *)title</Declaration>
<Parameters>
<Parameter>
<Name>title</Name>
<Abstract type="html">The string to replace the UINavigationBar&apos;s title while showing progress.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgressTitle:</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Set wether or not to show indeterminate.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Parameters>
<Parameter>
<Name>indeterminate</Name>
<Abstract type="html">wether or not the progress bar is indeterminate.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/finishProgress</TokenIdentifier>
<Abstract type="html">Fill the progress bar completely and remove it from display.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)finishProgress</Declaration>
<Anchor>//api/name/finishProgress</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/cancelProgress</TokenIdentifier>
<Abstract type="html">Remove the progress bar from the display.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)cancelProgress</Declaration>
<Anchor>//api/name/cancelProgress</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/isShowingProgressBar</TokenIdentifier>
<Abstract type="html">Wether or not the progress bar is showing.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (BOOL)isShowingProgressBar</Declaration>
<Anchor>//api/name/isShowingProgressBar</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the progress bar if you do not want it to be the same as the UINavigationBar&apos;s tint color. If set to nil, the UINavigationBar&apos;s tint color will be used.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Parameters>
<Parameter>
<Name>primaryColor</Name>
<Abstract type="html">The color to set.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="18"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/UINavigationController/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the progress bar, if nil, the secondary color will be the barTintColor.</Abstract>
<DeclaredIn>UINavigationController+M13ProgressViewBar.h</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Parameters>
<Parameter>
<Name>secondaryColor</Name>
<Abstract type="html">The color to set.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="18"/>
</Token>
</File>
</Tokens>
@@ -1,997 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressHUD.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressHUD</TokenIdentifier>
<Abstract type="html">A progress HUD to display progress, and a description over a window or view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/initWithProgressView:</TokenIdentifier>
<Abstract type="html">Initalize the HUD with a customized progress view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (id)initWithProgressView:(M13ProgressView *)progressView</Declaration>
<Parameters>
<Parameter>
<Name>progressView</Name>
<Abstract type="html">The progres view to display in the HUD.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/initWithProgressView:</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/initAndShowWithProgressView:progress:indeterminate:status:mask:inView:</TokenIdentifier>
<Abstract type="html">Initalize and show the hud with parameters.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (id)initAndShowWithProgressView:(M13ProgressView *)progressView progress:(CGFloat)progress indeterminate:(BOOL)indeterminate status:(NSString *)status mask:(M13ProgressHUDMaskType)maskType inView:(UIView *)view</Declaration>
<Parameters>
<Parameter>
<Name>progressView</Name>
<Abstract type="html">The progress view to show in the HUD.</Abstract>
</Parameter><Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to display in the progress view.</Abstract>
</Parameter><Parameter>
<Name>indeterminate</Name>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
</Parameter><Parameter>
<Name>status</Name>
<Abstract type="html">The status to display in the HUD.</Abstract>
</Parameter><Parameter>
<Name>maskType</Name>
<Abstract type="html">The type of mask to use for the HUD.</Abstract>
</Parameter><Parameter>
<Name>view</Name>
<Abstract type="html">The view to show the HUD in.</Abstract>
</Parameter>
</Parameters>
<ReturnValue><Abstract type="html">A instance of M13PRogressHUD</Abstract></ReturnValue>
<Anchor>//api/name/initAndShowWithProgressView:progress:indeterminate:status:mask:inView:</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setProgressView:</TokenIdentifier>
<Abstract type="html">The progress view displaied.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) M13ProgressView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/progressView</TokenIdentifier>
<Abstract type="html">The progress view displaied.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) M13ProgressView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/progressView</TokenIdentifier>
<Abstract type="html">The progress view displaied.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) M13ProgressView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/primaryColor</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/primaryColor</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/secondaryColor</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/secondaryColor</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setProgress:</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/progress</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/progress</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/indeterminate</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/indeterminate</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setApplyBlurToBackground:</TokenIdentifier>
<Abstract type="html">Wether or not a iOS7 style blur is applied to the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL applyBlurToBackground</Declaration>
<Anchor>//api/name/applyBlurToBackground</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/applyBlurToBackground</TokenIdentifier>
<Abstract type="html">Wether or not a iOS7 style blur is applied to the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL applyBlurToBackground</Declaration>
<Anchor>//api/name/applyBlurToBackground</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/applyBlurToBackground</TokenIdentifier>
<Abstract type="html">Wether or not a iOS7 style blur is applied to the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL applyBlurToBackground</Declaration>
<Anchor>//api/name/applyBlurToBackground</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setHudBackgroundColor:</TokenIdentifier>
<Abstract type="html">The color of the background.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *hudBackgroundColor</Declaration>
<Anchor>//api/name/hudBackgroundColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/hudBackgroundColor</TokenIdentifier>
<Abstract type="html">The color of the background.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *hudBackgroundColor</Declaration>
<Anchor>//api/name/hudBackgroundColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/hudBackgroundColor</TokenIdentifier>
<Abstract type="html">The color of the background.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *hudBackgroundColor</Declaration>
<Anchor>//api/name/hudBackgroundColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setStatusPosition:</TokenIdentifier>
<Abstract type="html">The location of the status label in comparison to the progress view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressHUDStatusPosition statusPosition</Declaration>
<Anchor>//api/name/statusPosition</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/statusPosition</TokenIdentifier>
<Abstract type="html">The location of the status label in comparison to the progress view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressHUDStatusPosition statusPosition</Declaration>
<Anchor>//api/name/statusPosition</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/statusPosition</TokenIdentifier>
<Abstract type="html">The location of the status label in comparison to the progress view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressHUDStatusPosition statusPosition</Declaration>
<Anchor>//api/name/statusPosition</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setOffsetFromCenter:</TokenIdentifier>
<Abstract type="html">The offset distance of the HUD from the center of its superview.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) UIOffset offsetFromCenter</Declaration>
<Anchor>//api/name/offsetFromCenter</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/offsetFromCenter</TokenIdentifier>
<Abstract type="html">The offset distance of the HUD from the center of its superview.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) UIOffset offsetFromCenter</Declaration>
<Anchor>//api/name/offsetFromCenter</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/offsetFromCenter</TokenIdentifier>
<Abstract type="html">The offset distance of the HUD from the center of its superview.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) UIOffset offsetFromCenter</Declaration>
<Anchor>//api/name/offsetFromCenter</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setContentMargin:</TokenIdentifier>
<Abstract type="html">The margin between the edge of the HUD and it&apos;s progress view and status label.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat contentMargin</Declaration>
<Anchor>//api/name/contentMargin</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/contentMargin</TokenIdentifier>
<Abstract type="html">The margin between the edge of the HUD and it&apos;s progress view and status label.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat contentMargin</Declaration>
<Anchor>//api/name/contentMargin</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/contentMargin</TokenIdentifier>
<Abstract type="html">The margin between the edge of the HUD and it&apos;s progress view and status label.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat contentMargin</Declaration>
<Anchor>//api/name/contentMargin</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setCornerRadius:</TokenIdentifier>
<Abstract type="html">The corner radius of the HUD view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/cornerRadius</TokenIdentifier>
<Abstract type="html">The corner radius of the HUD view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/cornerRadius</TokenIdentifier>
<Abstract type="html">The corner radius of the HUD view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setMaskType:</TokenIdentifier>
<Abstract type="html">The type of mask the HUD displays over the view&apos;s content.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressHUDMaskType maskType</Declaration>
<Anchor>//api/name/maskType</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/maskType</TokenIdentifier>
<Abstract type="html">The type of mask the HUD displays over the view&apos;s content.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressHUDMaskType maskType</Declaration>
<Anchor>//api/name/maskType</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/maskType</TokenIdentifier>
<Abstract type="html">The type of mask the HUD displays over the view&apos;s content.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressHUDMaskType maskType</Declaration>
<Anchor>//api/name/maskType</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setMaskColor:</TokenIdentifier>
<Abstract type="html">The color of the HUD mask if set to Solid Color or Gradient.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *maskColor</Declaration>
<Anchor>//api/name/maskColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/maskColor</TokenIdentifier>
<Abstract type="html">The color of the HUD mask if set to Solid Color or Gradient.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *maskColor</Declaration>
<Anchor>//api/name/maskColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/maskColor</TokenIdentifier>
<Abstract type="html">The color of the HUD mask if set to Solid Color or Gradient.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *maskColor</Declaration>
<Anchor>//api/name/maskColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setStatusColor:</TokenIdentifier>
<Abstract type="html">The color of the status text.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *statusColor</Declaration>
<Anchor>//api/name/statusColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/statusColor</TokenIdentifier>
<Abstract type="html">The color of the status text.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *statusColor</Declaration>
<Anchor>//api/name/statusColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/statusColor</TokenIdentifier>
<Abstract type="html">The color of the status text.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *statusColor</Declaration>
<Anchor>//api/name/statusColor</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setStatusFont:</TokenIdentifier>
<Abstract type="html">The font to display the status label with.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIFont *statusFont</Declaration>
<Anchor>//api/name/statusFont</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/statusFont</TokenIdentifier>
<Abstract type="html">The font to display the status label with.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIFont *statusFont</Declaration>
<Anchor>//api/name/statusFont</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/statusFont</TokenIdentifier>
<Abstract type="html">The font to display the status label with.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIFont *statusFont</Declaration>
<Anchor>//api/name/statusFont</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setProgressViewSize:</TokenIdentifier>
<Abstract type="html">The size of the progress view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize progressViewSize</Declaration>
<Anchor>//api/name/progressViewSize</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/progressViewSize</TokenIdentifier>
<Abstract type="html">The size of the progress view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize progressViewSize</Declaration>
<Anchor>//api/name/progressViewSize</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/progressViewSize</TokenIdentifier>
<Abstract type="html">The size of the progress view.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize progressViewSize</Declaration>
<Anchor>//api/name/progressViewSize</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setAnimationPoint:</TokenIdentifier>
<Abstract type="html">The origin of the show/hide animation. show: will animate from this point, and hide: will animate to this point.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint animationPoint</Declaration>
<Anchor>//api/name/animationPoint</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/animationPoint</TokenIdentifier>
<Abstract type="html">The origin of the show/hide animation. show: will animate from this point, and hide: will animate to this point.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint animationPoint</Declaration>
<Anchor>//api/name/animationPoint</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/animationPoint</TokenIdentifier>
<Abstract type="html">The origin of the show/hide animation. show: will animate from this point, and hide: will animate to this point.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint animationPoint</Declaration>
<Anchor>//api/name/animationPoint</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setAnimationDuration:</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/animationDuration</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/animationDuration</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setStatus:</TokenIdentifier>
<Abstract type="html">The text displayed in the HUD to provide more information to the user.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSString *status</Declaration>
<Anchor>//api/name/status</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/status</TokenIdentifier>
<Abstract type="html">The text displayed in the HUD to provide more information to the user.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSString *status</Declaration>
<Anchor>//api/name/status</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/status</TokenIdentifier>
<Abstract type="html">The text displayed in the HUD to provide more information to the user.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSString *status</Declaration>
<Anchor>//api/name/status</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setMinimumSize:</TokenIdentifier>
<Abstract type="html">Minimum size of the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize minimumSize</Declaration>
<Anchor>//api/name/minimumSize</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/minimumSize</TokenIdentifier>
<Abstract type="html">Minimum size of the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize minimumSize</Declaration>
<Anchor>//api/name/minimumSize</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/minimumSize</TokenIdentifier>
<Abstract type="html">Minimum size of the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize minimumSize</Declaration>
<Anchor>//api/name/minimumSize</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setDismissAfterAction:</TokenIdentifier>
<Abstract type="html">Wether or not to dismiss automatically after an action is performed.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL dismissAfterAction</Declaration>
<Anchor>//api/name/dismissAfterAction</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/dismissAfterAction</TokenIdentifier>
<Abstract type="html">Wether or not to dismiss automatically after an action is performed.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL dismissAfterAction</Declaration>
<Anchor>//api/name/dismissAfterAction</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/dismissAfterAction</TokenIdentifier>
<Abstract type="html">Wether or not to dismiss automatically after an action is performed.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL dismissAfterAction</Declaration>
<Anchor>//api/name/dismissAfterAction</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/isVisible</TokenIdentifier>
<Abstract type="html">Wether or not the HUD is currenty visible.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (BOOL)isVisible</Declaration>
<Anchor>//api/name/isVisible</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setShouldAutorotate:</TokenIdentifier>
<Abstract type="html">Wether or not the HUD will auto rotate to the device orientation.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL shouldAutorotate</Declaration>
<Anchor>//api/name/shouldAutorotate</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/shouldAutorotate</TokenIdentifier>
<Abstract type="html">Wether or not the HUD will auto rotate to the device orientation.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL shouldAutorotate</Declaration>
<Anchor>//api/name/shouldAutorotate</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/shouldAutorotate</TokenIdentifier>
<Abstract type="html">Wether or not the HUD will auto rotate to the device orientation.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL shouldAutorotate</Declaration>
<Anchor>//api/name/shouldAutorotate</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setOrientation:</TokenIdentifier>
<Abstract type="html">The orientation of the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) UIInterfaceOrientation orientation</Declaration>
<Anchor>//api/name/orientation</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/orientation</TokenIdentifier>
<Abstract type="html">The orientation of the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) UIInterfaceOrientation orientation</Declaration>
<Anchor>//api/name/orientation</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressHUD/orientation</TokenIdentifier>
<Abstract type="html">The orientation of the HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) UIInterfaceOrientation orientation</Declaration>
<Anchor>//api/name/orientation</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/show:</TokenIdentifier>
<Abstract type="html">Show the progress HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (void)show:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/show:</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/hide:</TokenIdentifier>
<Abstract type="html">Hide the progress HUD.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (void)hide:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/hide:</Anchor>
<NodeRef refid="2"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressHUD/dismiss:</TokenIdentifier>
<Abstract type="html">Dismiss the progress HUD and remove it from its superview.</Abstract>
<DeclaredIn>M13ProgressHUD.h</DeclaredIn>
<Declaration>- (void)dismiss:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/dismiss:</Anchor>
<NodeRef refid="2"/>
</Token>
</File>
</Tokens>
@@ -1,237 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressView.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressView</TokenIdentifier>
<Abstract type="html">A standardized base upon which to build progress views for applications. This allows one to use any subclass progress view in any component that use this standard.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/primaryColor</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressView/primaryColor</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *primaryColor</Declaration>
<Anchor>//api/name/primaryColor</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/secondaryColor</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressView/secondaryColor</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *secondaryColor</Declaration>
<Anchor>//api/name/secondaryColor</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/indeterminate</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressView/indeterminate</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL indeterminate</Declaration>
<Anchor>//api/name/indeterminate</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/setAnimationDuration:</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/animationDuration</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressView/animationDuration</TokenIdentifier>
<Abstract type="html">The durations of animations in seconds.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationDuration</Declaration>
<Anchor>//api/name/animationDuration</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/setProgress:</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/progress</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressView/progress</TokenIdentifier>
<Abstract type="html">The progress displayed to the user.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>@property (nonatomic, readonly) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="3"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressView/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressView.h</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="3"/>
</Token>
</File>
</Tokens>
@@ -1,669 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewBar.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewBar</TokenIdentifier>
<Abstract type="html">A replacement for UIProgressBar.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setProgressDirection:</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setProgressBarThickness:</TokenIdentifier>
<Abstract type="html">The thickness of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressBarThickness</Declaration>
<Anchor>//api/name/progressBarThickness</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/progressBarThickness</TokenIdentifier>
<Abstract type="html">The thickness of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressBarThickness</Declaration>
<Anchor>//api/name/progressBarThickness</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/progressBarThickness</TokenIdentifier>
<Abstract type="html">The thickness of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat progressBarThickness</Declaration>
<Anchor>//api/name/progressBarThickness</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setSuccessColor:</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/successColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/successColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setFailureColor:</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/failureColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/failureColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setShowPercentage:</TokenIdentifier>
<Abstract type="html">Wether or not to show percentage text. If shown exterior to the progress bar, the progress bar is shifted to make room for the text.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/showPercentage</TokenIdentifier>
<Abstract type="html">Wether or not to show percentage text. If shown exterior to the progress bar, the progress bar is shifted to make room for the text.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/showPercentage</TokenIdentifier>
<Abstract type="html">Wether or not to show percentage text. If shown exterior to the progress bar, the progress bar is shifted to make room for the text.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL showPercentage</Declaration>
<Anchor>//api/name/showPercentage</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setPercentagePosition:</TokenIdentifier>
<Abstract type="html">The location of the percentage in comparison to the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBarPercentagePosition percentagePosition</Declaration>
<Anchor>//api/name/percentagePosition</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/percentagePosition</TokenIdentifier>
<Abstract type="html">The location of the percentage in comparison to the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBarPercentagePosition percentagePosition</Declaration>
<Anchor>//api/name/percentagePosition</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/percentagePosition</TokenIdentifier>
<Abstract type="html">The location of the percentage in comparison to the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBarPercentagePosition percentagePosition</Declaration>
<Anchor>//api/name/percentagePosition</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setPercentageFormatter:</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/percentageFormatter</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/percentageFormatter</TokenIdentifier>
<Abstract type="html">The number formatter to display the progress percentage.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSNumberFormatter *percentageFormatter</Declaration>
<Anchor>//api/name/percentageFormatter</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setPercentageLabel:</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CATextLayer *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/percentageLabel</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CATextLayer *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/percentageLabel</TokenIdentifier>
<Abstract type="html">The label that shows the percentage.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CATextLayer *percentageLabel</Declaration>
<Anchor>//api/name/percentageLabel</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setProgressBar:</TokenIdentifier>
<Abstract type="html">The view of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIView *progressBar</Declaration>
<Anchor>//api/name/progressBar</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/progressBar</TokenIdentifier>
<Abstract type="html">The view of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIView *progressBar</Declaration>
<Anchor>//api/name/progressBar</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/progressBar</TokenIdentifier>
<Abstract type="html">The view of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIView *progressBar</Declaration>
<Anchor>//api/name/progressBar</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setProgressLayer:</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setIndeterminateLayer:</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/setCurrentAction:</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="4"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="4"/>
</Token>
</File>
</Tokens>
@@ -1,669 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewBorderedBar.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewBorderedBar</TokenIdentifier>
<Abstract type="html">A Progress bar with a thick border.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setProgressDirection:</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBorderedBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBorderedBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBorderedBarProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setCornerType:</TokenIdentifier>
<Abstract type="html">The type of corner to display on the bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBorderedBarCornerType cornerType</Declaration>
<Anchor>//api/name/cornerType</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/cornerType</TokenIdentifier>
<Abstract type="html">The type of corner to display on the bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBorderedBarCornerType cornerType</Declaration>
<Anchor>//api/name/cornerType</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/cornerType</TokenIdentifier>
<Abstract type="html">The type of corner to display on the bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewBorderedBarCornerType cornerType</Declaration>
<Anchor>//api/name/cornerType</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setCornerRadius:</TokenIdentifier>
<Abstract type="html">The corner radius of the ber if the corner type is set to Rounded.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/cornerRadius</TokenIdentifier>
<Abstract type="html">The corner radius of the ber if the corner type is set to Rounded.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/cornerRadius</TokenIdentifier>
<Abstract type="html">The corner radius of the ber if the corner type is set to Rounded.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat cornerRadius</Declaration>
<Anchor>//api/name/cornerRadius</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setBorderWidth:</TokenIdentifier>
<Abstract type="html">The border width of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat borderWidth</Declaration>
<Anchor>//api/name/borderWidth</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/borderWidth</TokenIdentifier>
<Abstract type="html">The border width of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat borderWidth</Declaration>
<Anchor>//api/name/borderWidth</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/borderWidth</TokenIdentifier>
<Abstract type="html">The border width of the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat borderWidth</Declaration>
<Anchor>//api/name/borderWidth</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setSuccessColor:</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/successColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/successColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the success action.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setFailureColor:</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/failureColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/failureColor</TokenIdentifier>
<Abstract type="html">The color the bar changes to for the failure action.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setPrimaryColor:</TokenIdentifier>
<Abstract type="html">The primary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>- (void)setPrimaryColor:(UIColor *)primaryColor</Declaration>
<Anchor>//api/name/setPrimaryColor:</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setSecondaryColor:</TokenIdentifier>
<Abstract type="html">The secondary color of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>- (void)setSecondaryColor:(UIColor *)secondaryColor</Declaration>
<Anchor>//api/name/setSecondaryColor:</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setProgressSuperLayer:</TokenIdentifier>
<Abstract type="html">The layer that contains the progress layer. That also masks the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressSuperLayer</Declaration>
<Anchor>//api/name/progressSuperLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/progressSuperLayer</TokenIdentifier>
<Abstract type="html">The layer that contains the progress layer. That also masks the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressSuperLayer</Declaration>
<Anchor>//api/name/progressSuperLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/progressSuperLayer</TokenIdentifier>
<Abstract type="html">The layer that contains the progress layer. That also masks the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *progressSuperLayer</Declaration>
<Anchor>//api/name/progressSuperLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setProgressLayer:</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/progressLayer</TokenIdentifier>
<Abstract type="html">The layer that displays progress in the progress bar.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *progressLayer</Declaration>
<Anchor>//api/name/progressLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setMaskLayer:</TokenIdentifier>
<Abstract type="html">The mask layer for the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *maskLayer</Declaration>
<Anchor>//api/name/maskLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/maskLayer</TokenIdentifier>
<Abstract type="html">The mask layer for the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *maskLayer</Declaration>
<Anchor>//api/name/maskLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/maskLayer</TokenIdentifier>
<Abstract type="html">The mask layer for the progress layer.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *maskLayer</Declaration>
<Anchor>//api/name/maskLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setBackgroundLayer:</TokenIdentifier>
<Abstract type="html">The background layer that displays the border.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/backgroundLayer</TokenIdentifier>
<Abstract type="html">The background layer that displays the border.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/backgroundLayer</TokenIdentifier>
<Abstract type="html">The background layer that displays the border.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CAShapeLayer *backgroundLayer</Declaration>
<Anchor>//api/name/backgroundLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setIndeterminateLayer:</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/indeterminateLayer</TokenIdentifier>
<Abstract type="html">The layer that is used to animate indeterminate progress.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) CALayer *indeterminateLayer</Declaration>
<Anchor>//api/name/indeterminateLayer</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/setCurrentAction:</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewBorderedBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="5"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewBorderedBar/currentAction</TokenIdentifier>
<Abstract type="html">The action currently being performed.</Abstract>
<DeclaredIn>M13ProgressViewBorderedBar.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewAction currentAction</Declaration>
<Anchor>//api/name/currentAction</Anchor>
<NodeRef refid="5"/>
</Token>
</File>
</Tokens>
@@ -1,384 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewFilteredImage.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewFilteredImage</TokenIdentifier>
<Abstract type="html">A progress view where progress is shown by changes in CIFilters.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setProgressImage:</TokenIdentifier>
<Abstract type="html">The image to use when showing progress.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImage *progressImage</Declaration>
<Anchor>//api/name/progressImage</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/progressImage</TokenIdentifier>
<Abstract type="html">The image to use when showing progress.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImage *progressImage</Declaration>
<Anchor>//api/name/progressImage</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/progressImage</TokenIdentifier>
<Abstract type="html">The image to use when showing progress.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImage *progressImage</Declaration>
<Anchor>//api/name/progressImage</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setProgressView:</TokenIdentifier>
<Abstract type="html">The UIImageView that shows the progress image.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImageView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/progressView</TokenIdentifier>
<Abstract type="html">The UIImageView that shows the progress image.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImageView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/progressView</TokenIdentifier>
<Abstract type="html">The UIImageView that shows the progress image.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImageView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setFilters:</TokenIdentifier>
<Abstract type="html">The array of CIFilters to apply to the image.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *filters</Declaration>
<Anchor>//api/name/filters</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/filters</TokenIdentifier>
<Abstract type="html">The array of CIFilters to apply to the image.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *filters</Declaration>
<Anchor>//api/name/filters</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/filters</TokenIdentifier>
<Abstract type="html">The array of CIFilters to apply to the image.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *filters</Declaration>
<Anchor>//api/name/filters</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setFilterParameters:</TokenIdentifier>
<Abstract type="html">The dictionaries of dictionaries that coresspond to filter properties to be changed.
NSArray
|------ NSDictionary (Index matches the coresponding CIFilter in filters
| |---- &quot;Parameter Key&quot; -&gt; NSDictionary
| | |------ &quot;Start Value&quot; -&gt; NSNumber
| | |------ &quot;End Value&quot; -&gt; NSNumber
| |---- &quot;Parameter Key&quot; -&gt; NSDictionary
| |------ &quot;Start Value&quot; -&gt; NSNumber
| |------ &quot;End Value&quot; -&gt; NSNumber
|------ NSDictionary ... </Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *filterParameters</Declaration>
<Anchor>//api/name/filterParameters</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/filterParameters</TokenIdentifier>
<Abstract type="html">The dictionaries of dictionaries that coresspond to filter properties to be changed.
NSArray
|------ NSDictionary (Index matches the coresponding CIFilter in filters
| |---- &quot;Parameter Key&quot; -&gt; NSDictionary
| | |------ &quot;Start Value&quot; -&gt; NSNumber
| | |------ &quot;End Value&quot; -&gt; NSNumber
| |---- &quot;Parameter Key&quot; -&gt; NSDictionary
| |------ &quot;Start Value&quot; -&gt; NSNumber
| |------ &quot;End Value&quot; -&gt; NSNumber
|------ NSDictionary ... </Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *filterParameters</Declaration>
<Anchor>//api/name/filterParameters</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/filterParameters</TokenIdentifier>
<Abstract type="html">The dictionaries of dictionaries that coresspond to filter properties to be changed.
NSArray
|------ NSDictionary (Index matches the coresponding CIFilter in filters
| |---- &quot;Parameter Key&quot; -&gt; NSDictionary
| | |------ &quot;Start Value&quot; -&gt; NSNumber
| | |------ &quot;End Value&quot; -&gt; NSNumber
| |---- &quot;Parameter Key&quot; -&gt; NSDictionary
| |------ &quot;Start Value&quot; -&gt; NSNumber
| |------ &quot;End Value&quot; -&gt; NSNumber
|------ NSDictionary ... </Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) NSArray *filterParameters</Declaration>
<Anchor>//api/name/filterParameters</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewFilteredImage/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="6"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewFilteredImage/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewFilteredImage.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="6"/>
</Token>
</File>
</Tokens>
@@ -1,393 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewImage.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewImage</TokenIdentifier>
<Abstract type="html">A progress bar where progress is shown by cutting an image.</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setProgressImage:</TokenIdentifier>
<Abstract type="html">The image to use when showing progress.</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImage *progressImage</Declaration>
<Anchor>//api/name/progressImage</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/progressImage</TokenIdentifier>
<Abstract type="html">The image to use when showing progress.</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImage *progressImage</Declaration>
<Anchor>//api/name/progressImage</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/progressImage</TokenIdentifier>
<Abstract type="html">The image to use when showing progress.</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImage *progressImage</Declaration>
<Anchor>//api/name/progressImage</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setProgressDirection:</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewImageProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewImageProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/progressDirection</TokenIdentifier>
<Abstract type="html">The direction of progress. (What direction the fill proceeds in.)</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewImageProgressDirection progressDirection</Declaration>
<Anchor>//api/name/progressDirection</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setDrawGreyscaleBackground:</TokenIdentifier>
<Abstract type="html">Wether or not to draw the greyscale background.</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL drawGreyscaleBackground</Declaration>
<Anchor>//api/name/drawGreyscaleBackground</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/drawGreyscaleBackground</TokenIdentifier>
<Abstract type="html">Wether or not to draw the greyscale background.</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL drawGreyscaleBackground</Declaration>
<Anchor>//api/name/drawGreyscaleBackground</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/drawGreyscaleBackground</TokenIdentifier>
<Abstract type="html">Wether or not to draw the greyscale background.</Abstract>
<DeclaredIn>M13ProgressViewImage.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) BOOL drawGreyscaleBackground</Declaration>
<Anchor>//api/name/drawGreyscaleBackground</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setIndeterminate:</TokenIdentifier>
<Abstract type="html">Wether or not the progress view is indeterminate.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>- (void)setIndeterminate:(BOOL)indeterminate</Declaration>
<Anchor>//api/name/setIndeterminate:</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setProgress:</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/progress</TokenIdentifier>
<Abstract type="html">Allow us to write to the progress.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, readwrite) CGFloat progress</Declaration>
<Anchor>//api/name/progress</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/setProgressView:</TokenIdentifier>
<Abstract type="html">The UIImageView that shows the progress image.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImageView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewImage/progressView</TokenIdentifier>
<Abstract type="html">The UIImageView that shows the progress image.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImageView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="7"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewImage/progressView</TokenIdentifier>
<Abstract type="html">The UIImageView that shows the progress image.</Abstract>
<DeclaredIn>M13ProgressViewImage.m</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIImageView *progressView</Declaration>
<Anchor>//api/name/progressView</Anchor>
<NodeRef refid="7"/>
</Token>
</File>
</Tokens>
@@ -1,469 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewLetterpress.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewLetterpress</TokenIdentifier>
<Abstract type="html"></Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setNumberOfGridPoints:</TokenIdentifier>
<Abstract type="html">The number of grid points in each direction.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint numberOfGridPoints</Declaration>
<Anchor>//api/name/numberOfGridPoints</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/numberOfGridPoints</TokenIdentifier>
<Abstract type="html">The number of grid points in each direction.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint numberOfGridPoints</Declaration>
<Anchor>//api/name/numberOfGridPoints</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/numberOfGridPoints</TokenIdentifier>
<Abstract type="html">The number of grid points in each direction.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGPoint numberOfGridPoints</Declaration>
<Anchor>//api/name/numberOfGridPoints</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setPointShape:</TokenIdentifier>
<Abstract type="html">The shape of the grid points.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewLetterpressPointShape pointShape</Declaration>
<Anchor>//api/name/pointShape</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/pointShape</TokenIdentifier>
<Abstract type="html">The shape of the grid points.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewLetterpressPointShape pointShape</Declaration>
<Anchor>//api/name/pointShape</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/pointShape</TokenIdentifier>
<Abstract type="html">The shape of the grid points.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewLetterpressPointShape pointShape</Declaration>
<Anchor>//api/name/pointShape</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setPointSpacing:</TokenIdentifier>
<Abstract type="html">The amount of space between the grid points.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat pointSpacing</Declaration>
<Anchor>//api/name/pointSpacing</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/pointSpacing</TokenIdentifier>
<Abstract type="html">The amount of space between the grid points.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat pointSpacing</Declaration>
<Anchor>//api/name/pointSpacing</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/pointSpacing</TokenIdentifier>
<Abstract type="html">The amount of space between the grid points.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat pointSpacing</Declaration>
<Anchor>//api/name/pointSpacing</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setNotchSize:</TokenIdentifier>
<Abstract type="html">The size of the notch to carve out on one side.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize notchSize</Declaration>
<Anchor>//api/name/notchSize</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/notchSize</TokenIdentifier>
<Abstract type="html">The size of the notch to carve out on one side.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize notchSize</Declaration>
<Anchor>//api/name/notchSize</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/notchSize</TokenIdentifier>
<Abstract type="html">The size of the notch to carve out on one side.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize notchSize</Declaration>
<Anchor>//api/name/notchSize</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setSpringConstant:</TokenIdentifier>
<Abstract type="html">The spring constant that defines the amount of &quot;spring&quot; the progress view has in its animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat springConstant</Declaration>
<Anchor>//api/name/springConstant</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/springConstant</TokenIdentifier>
<Abstract type="html">The spring constant that defines the amount of &quot;spring&quot; the progress view has in its animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat springConstant</Declaration>
<Anchor>//api/name/springConstant</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/springConstant</TokenIdentifier>
<Abstract type="html">The spring constant that defines the amount of &quot;spring&quot; the progress view has in its animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat springConstant</Declaration>
<Anchor>//api/name/springConstant</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setDampingCoefficient:</TokenIdentifier>
<Abstract type="html">The constant that determines how long the progress view &quot;bounces&quot; for.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat dampingCoefficient</Declaration>
<Anchor>//api/name/dampingCoefficient</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/dampingCoefficient</TokenIdentifier>
<Abstract type="html">The constant that determines how long the progress view &quot;bounces&quot; for.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat dampingCoefficient</Declaration>
<Anchor>//api/name/dampingCoefficient</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/dampingCoefficient</TokenIdentifier>
<Abstract type="html">The constant that determines how long the progress view &quot;bounces&quot; for.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat dampingCoefficient</Declaration>
<Anchor>//api/name/dampingCoefficient</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setMass:</TokenIdentifier>
<Abstract type="html">The constant that determines how much the springConstant and dampingCoefficent affect the animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat mass</Declaration>
<Anchor>//api/name/mass</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/mass</TokenIdentifier>
<Abstract type="html">The constant that determines how much the springConstant and dampingCoefficent affect the animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat mass</Declaration>
<Anchor>//api/name/mass</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/mass</TokenIdentifier>
<Abstract type="html">The constant that determines how much the springConstant and dampingCoefficent affect the animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat mass</Declaration>
<Anchor>//api/name/mass</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/setSpringDisplayLink:</TokenIdentifier>
<Abstract type="html">The display link that controls the spring animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *springDisplayLink</Declaration>
<Anchor>//api/name/springDisplayLink</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewLetterpress/springDisplayLink</TokenIdentifier>
<Abstract type="html">The display link that controls the spring animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *springDisplayLink</Declaration>
<Anchor>//api/name/springDisplayLink</Anchor>
<NodeRef refid="8"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewLetterpress/springDisplayLink</TokenIdentifier>
<Abstract type="html">The display link that controls the spring animation.</Abstract>
<DeclaredIn>M13ProgressViewLetterpress.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *springDisplayLink</Declaration>
<Anchor>//api/name/springDisplayLink</Anchor>
<NodeRef refid="8"/>
</Token>
</File>
</Tokens>
@@ -1,453 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tokens version="1.0">
<File path="Classes/M13ProgressViewMetro.html">
<Token>
<TokenIdentifier>//apple_ref/occ/cl/M13ProgressViewMetro</TokenIdentifier>
<Abstract type="html">A progress view based off of Windows 8&apos;s progress animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setNumberOfDots:</TokenIdentifier>
<Abstract type="html">The number of dots in the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfDots</Declaration>
<Anchor>//api/name/numberOfDots</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/numberOfDots</TokenIdentifier>
<Abstract type="html">The number of dots in the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfDots</Declaration>
<Anchor>//api/name/numberOfDots</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/numberOfDots</TokenIdentifier>
<Abstract type="html">The number of dots in the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) NSUInteger numberOfDots</Declaration>
<Anchor>//api/name/numberOfDots</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setAnimationShape:</TokenIdentifier>
<Abstract type="html">The shape of the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewMetroAnimationShape animationShape</Declaration>
<Anchor>//api/name/animationShape</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/animationShape</TokenIdentifier>
<Abstract type="html">The shape of the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewMetroAnimationShape animationShape</Declaration>
<Anchor>//api/name/animationShape</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/animationShape</TokenIdentifier>
<Abstract type="html">The shape of the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) M13ProgressViewMetroAnimationShape animationShape</Declaration>
<Anchor>//api/name/animationShape</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setDotSize:</TokenIdentifier>
<Abstract type="html">The size of the dots</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize dotSize</Declaration>
<Anchor>//api/name/dotSize</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/dotSize</TokenIdentifier>
<Abstract type="html">The size of the dots</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize dotSize</Declaration>
<Anchor>//api/name/dotSize</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/dotSize</TokenIdentifier>
<Abstract type="html">The size of the dots</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGSize dotSize</Declaration>
<Anchor>//api/name/dotSize</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setMetroDot:</TokenIdentifier>
<Abstract type="html">The dot to display.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) M13ProgressViewMetroDot *metroDot</Declaration>
<Anchor>//api/name/metroDot</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/metroDot</TokenIdentifier>
<Abstract type="html">The dot to display.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) M13ProgressViewMetroDot *metroDot</Declaration>
<Anchor>//api/name/metroDot</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/metroDot</TokenIdentifier>
<Abstract type="html">The dot to display.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) M13ProgressViewMetroDot *metroDot</Declaration>
<Anchor>//api/name/metroDot</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setSuccessColor:</TokenIdentifier>
<Abstract type="html">The color to show on success.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/successColor</TokenIdentifier>
<Abstract type="html">The color to show on success.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/successColor</TokenIdentifier>
<Abstract type="html">The color to show on success.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *successColor</Declaration>
<Anchor>//api/name/successColor</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setFailureColor:</TokenIdentifier>
<Abstract type="html">The color to show on failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/failureColor</TokenIdentifier>
<Abstract type="html">The color to show on failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/failureColor</TokenIdentifier>
<Abstract type="html">The color to show on failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>@property (nonatomic, retain) UIColor *failureColor</Declaration>
<Anchor>//api/name/failureColor</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/isAnimating</TokenIdentifier>
<Abstract type="html">Wether or not the progress view animating.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>- (BOOL)isAnimating</Declaration>
<Anchor>//api/name/isAnimating</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/beginAnimating</TokenIdentifier>
<Abstract type="html">Begin the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>- (void)beginAnimating</Declaration>
<Anchor>//api/name/beginAnimating</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/stopAnimating</TokenIdentifier>
<Abstract type="html">End the animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.h</DeclaredIn>
<Declaration>- (void)stopAnimating</Declaration>
<Anchor>//api/name/stopAnimating</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/performAction:animated:</TokenIdentifier>
<Abstract type="html">Perform the given action if defined. Usually showing success or failure.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>- (void)performAction:(M13ProgressViewAction)action animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>action</Name>
<Abstract type="html">The action to perform.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the change</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/performAction:animated:</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setProgress:animated:</TokenIdentifier>
<Abstract type="html">Set the progress of the M13ProgressView.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>- (void)setProgress:(CGFloat)progress animated:(BOOL)animated</Declaration>
<Parameters>
<Parameter>
<Name>progress</Name>
<Abstract type="html">The progress to show on the progress view.</Abstract>
</Parameter><Parameter>
<Name>animated</Name>
<Abstract type="html">Wether or not to animate the progress change.</Abstract>
</Parameter>
</Parameters>
<Anchor>//api/name/setProgress:animated:</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setAnimationFromValue:</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/animationFromValue</TokenIdentifier>
<Abstract type="html">The start progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationFromValue</Declaration>
<Anchor>//api/name/animationFromValue</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setAnimationToValue:</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/animationToValue</TokenIdentifier>
<Abstract type="html">The end progress for the progress animation.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CGFloat animationToValue</Declaration>
<Anchor>//api/name/animationToValue</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setAnimationStartTime:</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/animationStartTime</TokenIdentifier>
<Abstract type="html">The start time interval for the animaiton.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, assign) CFTimeInterval animationStartTime</Declaration>
<Anchor>//api/name/animationStartTime</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/setDisplayLink:</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instm/M13ProgressViewMetro/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="9"/>
</Token>
<Token>
<TokenIdentifier>//apple_ref/occ/instp/M13ProgressViewMetro/displayLink</TokenIdentifier>
<Abstract type="html">Link to the display to keep animations in sync.</Abstract>
<DeclaredIn>M13ProgressViewMetro.m</DeclaredIn>
<Declaration>@property (nonatomic, strong) CADisplayLink *displayLink</Declaration>
<Anchor>//api/name/displayLink</Anchor>
<NodeRef refid="9"/>
</Token>
</File>
</Tokens>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More