48 Commits

Author SHA1 Message Date
shu223 c4cdee6a36 Update storyboards with Xcode 13 2021-10-12 18:37:02 +09:00
shu223 553e235389 Delete launch images from the asset catalog. 2021-10-12 18:34:16 +09:00
shu223 cb4bc7ecd7 Update the project settings with Xcode 13 2021-10-12 18:32:17 +09:00
Shuichi Tsutsumi 8a4176470b Merge pull request #49 from faimin/master
fix misjudgment import
2021-10-12 18:12:30 +09:00
Zero.D.Saber d2a273d5ca fix misjudgment import 2021-10-12 13:51:56 +08:00
shu223 40fb22d7ff Update podspec 2020-07-03 18:59:51 +09:00
shu223 3e6b2fed63 Enable to set the effect's borderWidth and borderColor. 2020-07-03 18:59:12 +09:00
shu223 a146adf67e Update podspec 2020-07-03 18:23:40 +09:00
shu223 603155e62d Fix leaks 2020-07-03 18:22:04 +09:00
Shuichi Tsutsumi 1a10a75797 Create FUNDING.yml 2020-03-29 07:35:58 +09:00
shu223 001605f85f Update project settings with Xcode 10.2 2019-04-11 13:42:44 +09:00
shu223 5d17f1ece9 Fix the layout 2018-09-15 11:53:54 +09:00
shu223 c1d9c432aa Update README 2018-09-15 11:40:41 +09:00
shu223 31fd76852b Updated with Xcode 9.3 2018-05-24 13:57:02 -07:00
shu223 8a8a527cdd Merge branch 'master' of github.com:shu223/PulsingHalo 2018-01-23 13:50:53 -08:00
shu223 7d39995a9e Fixes with Xcode 9 2018-01-23 13:50:38 -08:00
Shuichi Tsutsumi 926af87bae Update README.md 2017-10-02 23:05:38 -05:00
shu223 255eacebdf Fixed podspec 2017-09-09 08:21:35 +09:00
shu223 42cf015108 Update README.md 2017-05-07 00:48:16 +09:00
shu223 a9c3563112 Update README.md 2017-05-07 00:47:35 +09:00
shu223 d7dc0523e0 Updated the version in the podspec 2017-05-07 00:05:06 +09:00
shu223 f2ef50c1eb Updated a storyboard 2017-04-07 17:29:45 -07:00
shu223 2dc6f0d809 updated podspec 2017-01-17 12:47:32 -08:00
shu223 3323f9f122 updated podspec 2017-01-15 17:57:07 -08:00
shu223 045ee21f6a added a property to disable resume 2017-01-15 17:52:35 -08:00
shu223 ddd93811b5 supported resuming 2017-01-15 17:46:57 -08:00
shu223 2d84f15758 Updated podspec. 2016-09-07 11:46:01 +09:00
shu223 80ac3fbcc4 http://stackoverflow.com/questions/19789958/xcode-preprocessor-macro-to-check-if-base-sdk-ios-7-0 2016-09-07 11:34:58 +09:00
shu223 457e4406e9 Enabled to be built with both iOS 9 or lower and 10. 2016-09-07 11:24:38 +09:00
shu223 25aa12f9c2 Enabled to be built by both iOS target 10 and 9 or lower. 2016-09-07 11:19:16 +09:00
shu223 cfcce191df Updated podspec. 2016-09-07 11:00:59 +09:00
shu223 9de09941a5 Changes by Xcode 8 2016-09-07 11:00:22 +09:00
shu223 d3dedae77e Resolved a warning 2016-09-03 11:12:34 +09:00
shu223 ac8d81f1f3 Updated the podspec 2016-08-04 12:40:35 +09:00
shu223 1f75b98748 Fixed a bug of repeatCount 2016-08-04 12:40:03 +09:00
shu223 43a5363c11 Updated the podspec 2016-08-04 11:43:52 +09:00
shu223 cd85593a0e Updated README 2016-08-04 11:43:34 +09:00
shu223 499f05f8c4 Fixed a bug of repeatConunt property. 2016-08-04 11:33:14 +09:00
shu223 51f20ee16e Resolved warnings for demo 2016-08-04 11:28:41 +09:00
shu223 eed177243f Disabled fromValueForAlpha 2016-08-04 11:25:01 +09:00
shu223 4d1071ddb7 Updated with Xcode 7.3.1 2016-08-04 11:05:37 +09:00
shu223 0799f509e1 Update README 2016-05-04 16:14:46 +09:00
shu223 c0a303b656 Updated README 2016-05-04 15:35:23 +09:00
shu223 968d1850c6 Updated with Xcode 7.3 2016-05-04 15:35:12 +09:00
shu223 68887786b4 Merge pull request #35 from harryworld/patch-1
Omitting headers for pods in duplicate imports
2016-03-22 08:52:45 +01:00
Harry Ng 6cffb57e63 Omitting headers for pods in duplicate imports 2016-03-22 09:59:34 +08:00
shu223 4e500461bf Update README for Carthage support. 2016-03-11 22:54:13 +09:00
shu223 807f317776 Create shared framework 2016-03-11 22:46:35 +09:00
19 changed files with 632 additions and 203 deletions
+4
View File
@@ -0,0 +1,4 @@
# These are supported funding model platforms
github: [shu223]
custom: ['https://paypal.me/shu223']
+32 -11
View File
@@ -1,6 +1,12 @@
# Xcode
.DS_Store
*/build/*
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
@@ -9,13 +15,28 @@
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
profile
*.moved-aside
DerivedData
.idea/
*.hmap
*.xccheckout
xcuserdata/
#CocoaPods
Pods
## Other
*.moved-aside
*.xcuserstate
## Obj-C/Swift specific
*.hmap
*.ipa
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
Pods/
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
PulsingHaloDemo.xccheckout
+5 -4
View File
@@ -1,12 +1,13 @@
Pod::Spec.new do |s|
s.name = "PulsingHalo"
s.version = "0.1.0"
s.summary = "iOS Component For Creating A Pulsing Animation Great For Map Annotations And Beacons"
s.version = "0.2.10"
s.platform = :ios
s.ios.deployment_target = '8.0'
s.summary = "iOS Component to create Pulsating Animations."
s.homepage = "https://github.com/shu223/PulsingHalo"
s.license = 'MIT'
s.author = { "shu223" => "shuichi0526@gmail.com" }
s.platform = :ios
s.source = { :git => "https://github.com/shu223/PulsingHalo.git", :tag => "0.1.0" }
s.source = { :git => "https://github.com/shu223/PulsingHalo.git", :tag => "0.2.10" }
s.source_files = 'PulsingHalo/*.{h,m}'
s.framework = 'QuartzCore'
s.requires_arc = true
+26
View File
@@ -0,0 +1,26 @@
<?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>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
+25
View File
@@ -0,0 +1,25 @@
//
// PulsingHalo.h
// PulsingHalo
//
// Created by Shuichi Tsutsumi on 3/11/16.
// Copyright © 2016 Shuichi Tsutsumi. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for PulsingHalo.
FOUNDATION_EXPORT double PulsingHaloVersionNumber;
//! Project version string for PulsingHalo.
FOUNDATION_EXPORT const unsigned char PulsingHaloVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <PulsingHalo/PublicHeader.h>
#if __has_include(<PulsingHalo/PulsingHaloLayer.h>)
#import <PulsingHalo/PulsingHaloLayer.h>
#else
#import "PulsingHaloLayer.h"
#endif
+8 -6
View File
@@ -27,7 +27,7 @@
/**
* The default value of this property is @c 0.45.
*/
@property (nonatomic, assign) CGFloat fromValueForAlpha;
@property (nonatomic, assign) CGFloat fromValueForAlpha __attribute__ ((unavailable("Now the alpha channel of the backgroundColor is used.")));
/**
* The value of this property should be ranging from @c 0 to @c 1 (exclusive).
@@ -50,11 +50,6 @@
*/
@property (nonatomic, assign) NSTimeInterval pulseInterval;
/**
* The default value of this property is @c INFINITY.
*/
@property (nonatomic, assign) float repeatCount;
/**
* The default value of this property is @c YES.
*/
@@ -72,7 +67,14 @@
*/
@property (nonatomic, assign) NSTimeInterval startInterval;
/**
* When this value is true, the halo will be automatically resumed after entering foreground.
*
* The default value of this property is YES.
*/
@property (nonatomic, assign) BOOL shouldResume;
- (void)start;
- (void)stop;
@end
+73 -12
View File
@@ -10,10 +10,18 @@
#import "PulsingHaloLayer.h"
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000
@interface PulsingHaloLayer () <CAAnimationDelegate>
#else
@interface PulsingHaloLayer ()
#endif
@property (nonatomic, strong) CALayer *effect;
@property (nonatomic, strong) CAAnimationGroup *animationGroup;
// for resume
@property (nonatomic, weak) CALayer *prevSuperlayer;
@property (nonatomic, assign) unsigned int prevLayerIndex;
@property (nonatomic, strong) CAAnimation *prevAnimation;
@end
@@ -24,17 +32,48 @@
{
self = [super init];
if (self) {
self.effect = [CALayer new];
self.effect.contentsScale = [UIScreen mainScreen].scale;
self.effect.opacity = 0;
[self addSublayer:self.effect];
[self _setupDefaults];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onWillEnterForeground:)
name:UIApplicationWillEnterForegroundNotification object:nil];
}
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)onDidEnterBackground:(NSNotification *)notification {
self.prevSuperlayer = self.superlayer;
if (self.prevSuperlayer) {
unsigned int layerIndex = 0;
for (CALayer *aSublayer in self.superlayer.sublayers) {
if (aSublayer == self) {
self.prevLayerIndex = layerIndex;
break;
}
layerIndex++;
}
}
self.prevAnimation = [self.effect animationForKey:@"pulse"];
}
- (void)onWillEnterForeground:(NSNotification *)notification {
if (self.shouldResume) {
[self _resume];
}
}
// =============================================================================
#pragma mark - Accessor
@@ -44,18 +83,32 @@
[self.effect addAnimation:self.animationGroup forKey:@"pulse"];
}
- (void)stop {
[self removeAllAnimations];
self.animationGroup.delegate = nil;
}
- (void)setFrame:(CGRect)frame {
[super setFrame:frame];
self.effect.frame = frame;
}
- (void)setBorderWidth:(CGFloat)borderWidth {
[super setBorderWidth:borderWidth];
self.effect.borderWidth = borderWidth;
}
- (void)setBorderColor:(CGColorRef)borderColor {
[super setBorderColor:borderColor];
self.effect.borderColor = borderColor;
}
- (void)setBackgroundColor:(CGColorRef)backgroundColor {
[super setBackgroundColor:backgroundColor];
self.effect.backgroundColor = backgroundColor;
}
- (void)setRadius:(CGFloat)radius {
_radius = radius;
CGFloat diameter = self.radius * 2;
@@ -65,7 +118,6 @@
}
- (void)setPulseInterval:(NSTimeInterval)pulseInterval {
_pulseInterval = pulseInterval;
if (_pulseInterval == INFINITY) {
@@ -74,32 +126,34 @@
}
- (void)setHaloLayerNumber:(NSInteger)haloLayerNumber {
_haloLayerNumber = haloLayerNumber;
self.instanceCount = haloLayerNumber;
self.instanceDelay = (self.animationDuration + self.pulseInterval) / haloLayerNumber;
}
- (void)setStartInterval:(NSTimeInterval)startInterval {
_startInterval = startInterval;
self.instanceDelay = startInterval;
}
- (void)setAnimationDuration:(NSTimeInterval)animationDuration {
_animationDuration = animationDuration;
self.instanceDelay = (self.animationDuration + self.pulseInterval) / self.haloLayerNumber;
}
- (void)setRepeatCount:(float)repeatCount {
[super setRepeatCount:repeatCount];
self.animationGroup.repeatCount = repeatCount;
}
// =============================================================================
#pragma mark - Private
- (void)_setupDefaults {
_shouldResume = YES;
_fromValueForRadius = 0.0;
_fromValueForAlpha = 0.45;
_keyTimeForHalfOpacity = 0.2;
_animationDuration = 3;
_pulseInterval = 0;
@@ -109,11 +163,10 @@
self.radius = 60;
self.haloLayerNumber = 1;
self.startInterval = 1;
self.backgroundColor = [[UIColor colorWithRed:0.000 green:0.455 blue:0.756 alpha:1] CGColor];
self.backgroundColor = [[UIColor colorWithRed:0.000 green:0.455 blue:0.756 alpha:0.45] CGColor];
}
- (void)_setupAnimationGroup {
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.duration = self.animationDuration + self.pulseInterval;
animationGroup.repeatCount = self.repeatCount;
@@ -129,7 +182,8 @@
CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.duration = self.animationDuration;
opacityAnimation.values = @[@(self.fromValueForAlpha), @0.45, @0];
CGFloat fromValueForAlpha = CGColorGetAlpha(self.backgroundColor);
opacityAnimation.values = @[@(fromValueForAlpha), @(fromValueForAlpha * 0.5), @0];
opacityAnimation.keyTimes = @[@0, @(self.keyTimeForHalfOpacity), @1];
NSArray *animations = @[scaleAnimation, opacityAnimation];
@@ -140,12 +194,19 @@
self.animationGroup.delegate = self;
}
- (void)_resume {
[self addSublayer:self.effect];
[self.prevSuperlayer insertSublayer:self atIndex:self.prevLayerIndex];
if (self.prevAnimation) {
[self.effect addAnimation:self.prevAnimation forKey:@"pulse"];
}
}
// =============================================================================
#pragma mark - CAAnimationDelegate
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
if ([self.effect.animationKeys count]) {
[self.effect removeAllAnimations];
}
+203 -19
View File
@@ -7,7 +7,10 @@
objects = {
/* Begin PBXBuildFile section */
8A76D79E1BD4CC6B00C3881D /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8A76D79D1BD4CC6B00C3881D /* Launch Screen.storyboard */; settings = {ASSET_TAGS = (); }; };
8A76D79E1BD4CC6B00C3881D /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8A76D79D1BD4CC6B00C3881D /* Launch Screen.storyboard */; };
8AB7E7DC1C92DD87009A3BB6 /* PulsingHalo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB7E7DB1C92DD87009A3BB6 /* PulsingHalo.h */; settings = {ATTRIBUTES = (Public, ); }; };
8AB7E80A1C92F6FB009A3BB6 /* PulsingHaloLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC9074B185065DB00A74F2E /* PulsingHaloLayer.m */; };
8AB7E8121C92FEB1009A3BB6 /* PulsingHaloLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC9074A185065DB00A74F2E /* PulsingHaloLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
8AC907151850659E00A74F2E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AC907141850659E00A74F2E /* Foundation.framework */; };
8AC907171850659E00A74F2E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AC907161850659E00A74F2E /* CoreGraphics.framework */; };
8AC907191850659E00A74F2E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AC907181850659E00A74F2E /* UIKit.framework */; };
@@ -35,8 +38,24 @@
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
8AB7E7E51C92DD88009A3BB6 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
8A76D79D1BD4CC6B00C3881D /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
8AB7E7D91C92DD87009A3BB6 /* PulsingHalo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PulsingHalo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8AB7E7DB1C92DD87009A3BB6 /* PulsingHalo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PulsingHalo.h; sourceTree = "<group>"; };
8AB7E7DD1C92DD87009A3BB6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8AC907111850659E00A74F2E /* PulsingHaloDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PulsingHaloDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
8AC907141850659E00A74F2E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
8AC907161850659E00A74F2E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
@@ -61,6 +80,13 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8AB7E7D51C92DD87009A3BB6 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
8AC9070E1850659E00A74F2E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -84,10 +110,21 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
8AB7E7DA1C92DD87009A3BB6 /* PulsingHalo */ = {
isa = PBXGroup;
children = (
8AB7E7DB1C92DD87009A3BB6 /* PulsingHalo.h */,
8AC9074A185065DB00A74F2E /* PulsingHaloLayer.h */,
8AC9074B185065DB00A74F2E /* PulsingHaloLayer.m */,
8AB7E7DD1C92DD87009A3BB6 /* Info.plist */,
);
path = PulsingHalo;
sourceTree = "<group>";
};
8AC907081850659E00A74F2E = {
isa = PBXGroup;
children = (
8AC90749185065DB00A74F2E /* PulsingHalo */,
8AB7E7DA1C92DD87009A3BB6 /* PulsingHalo */,
8AC9071A1850659E00A74F2E /* PulsingHaloDemo */,
8AC907391850659E00A74F2E /* PulsingHaloDemoTests */,
8AC907131850659E00A74F2E /* Frameworks */,
@@ -100,6 +137,7 @@
children = (
8AC907111850659E00A74F2E /* PulsingHaloDemo.app */,
8AC907321850659E00A74F2E /* PulsingHaloDemoTests.xctest */,
8AB7E7D91C92DD87009A3BB6 /* PulsingHalo.framework */,
);
name = Products;
sourceTree = "<group>";
@@ -159,18 +197,39 @@
name = "Supporting Files";
sourceTree = "<group>";
};
8AC90749185065DB00A74F2E /* PulsingHalo */ = {
isa = PBXGroup;
children = (
8AC9074A185065DB00A74F2E /* PulsingHaloLayer.h */,
8AC9074B185065DB00A74F2E /* PulsingHaloLayer.m */,
);
path = PulsingHalo;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8AB7E7D61C92DD87009A3BB6 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8AB7E7DC1C92DD87009A3BB6 /* PulsingHalo.h in Headers */,
8AB7E8121C92FEB1009A3BB6 /* PulsingHaloLayer.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8AB7E7D81C92DD87009A3BB6 /* PulsingHalo */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8AB7E7E41C92DD88009A3BB6 /* Build configuration list for PBXNativeTarget "PulsingHalo" */;
buildPhases = (
8AB7E7D41C92DD87009A3BB6 /* Sources */,
8AB7E7D51C92DD87009A3BB6 /* Frameworks */,
8AB7E7D61C92DD87009A3BB6 /* Headers */,
8AB7E7D71C92DD87009A3BB6 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = PulsingHalo;
productName = PulsingHalo;
productReference = 8AB7E7D91C92DD87009A3BB6 /* PulsingHalo.framework */;
productType = "com.apple.product-type.framework";
};
8AC907101850659E00A74F2E /* PulsingHaloDemo */ = {
isa = PBXNativeTarget;
buildConfigurationList = 8AC907431850659E00A74F2E /* Build configuration list for PBXNativeTarget "PulsingHaloDemo" */;
@@ -178,6 +237,7 @@
8AC9070D1850659E00A74F2E /* Sources */,
8AC9070E1850659E00A74F2E /* Frameworks */,
8AC9070F1850659E00A74F2E /* Resources */,
8AB7E7E51C92DD88009A3BB6 /* Embed Frameworks */,
);
buildRules = (
);
@@ -212,9 +272,16 @@
8AC907091850659E00A74F2E /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0700;
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "Shuichi Tsutsumi";
TargetAttributes = {
8AB7E7D81C92DD87009A3BB6 = {
CreatedOnToolsVersion = 7.2.1;
};
8AC907101850659E00A74F2E = {
DevelopmentTeam = 9Z86A4AWDE;
ProvisioningStyle = Automatic;
};
8AC907311850659E00A74F2E = {
TestTargetID = 8AC907101850659E00A74F2E;
};
@@ -222,7 +289,7 @@
};
buildConfigurationList = 8AC9070C1850659E00A74F2E /* Build configuration list for PBXProject "PulsingHaloDemo" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
@@ -235,11 +302,19 @@
targets = (
8AC907101850659E00A74F2E /* PulsingHaloDemo */,
8AC907311850659E00A74F2E /* PulsingHaloDemoTests */,
8AB7E7D81C92DD87009A3BB6 /* PulsingHalo */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8AB7E7D71C92DD87009A3BB6 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
8AC9070F1850659E00A74F2E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -262,6 +337,14 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8AB7E7D41C92DD87009A3BB6 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8AB7E80A1C92F6FB009A3BB6 /* PulsingHaloLayer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
8AC9070D1850659E00A74F2E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -319,27 +402,100 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
8AB7E7E21C92DD88009A3BB6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_WARN_UNREACHABLE_CODE = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = PulsingHalo/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = YES;
PRODUCT_BUNDLE_IDENTIFIER = "Shuichi-Tsutsumi.PulsingHalo";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
8AB7E7E31C92DD88009A3BB6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_WARN_UNREACHABLE_CODE = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = PulsingHalo/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "Shuichi-Tsutsumi.PulsingHalo";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
8AC907411850659E00A74F2E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@@ -352,7 +508,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
@@ -362,29 +518,44 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
@@ -394,11 +565,13 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
DEVELOPMENT_TEAM = 9Z86A4AWDE;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "PulsingHaloDemo/PulsingHaloDemo-Prefix.pch";
INFOPLIST_FILE = "PulsingHaloDemo/PulsingHaloDemo-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.4;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "Shuichi-Tsutsumi.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
@@ -409,11 +582,13 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
DEVELOPMENT_TEAM = 9Z86A4AWDE;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "PulsingHaloDemo/PulsingHaloDemo-Prefix.pch";
INFOPLIST_FILE = "PulsingHaloDemo/PulsingHaloDemo-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.4;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "Shuichi-Tsutsumi.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
@@ -465,6 +640,15 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
8AB7E7E41C92DD88009A3BB6 /* Build configuration list for PBXNativeTarget "PulsingHalo" */ = {
isa = XCConfigurationList;
buildConfigurations = (
8AB7E7E21C92DD88009A3BB6 /* Debug */,
8AB7E7E31C92DD88009A3BB6 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
8AC9070C1850659E00A74F2E /* Build configuration list for PBXProject "PulsingHaloDemo" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -0,0 +1,8 @@
<?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>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8AB7E7D81C92DD87009A3BB6"
BuildableName = "PulsingHalo.framework"
BlueprintName = "PulsingHalo"
ReferencedContainer = "container:PulsingHaloDemo.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8AB7E7D81C92DD87009A3BB6"
BuildableName = "PulsingHalo.framework"
BlueprintName = "PulsingHalo"
ReferencedContainer = "container:PulsingHaloDemo.xcodeproj">
</BuildableReference>
</MacroExpansion>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8AB7E7D81C92DD87009A3BB6"
BuildableName = "PulsingHalo.framework"
BlueprintName = "PulsingHalo"
ReferencedContainer = "container:PulsingHaloDemo.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
+80 -87
View File
@@ -1,47 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8191" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="vXZ-lx-hvc">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="vXZ-lx-hvc">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="ufC-wZ-h7g">
<objects>
<viewController id="vXZ-lx-hvc" customClass="ViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="3co-dU-CDK"/>
<viewControllerLayoutGuide type="bottom" id="SwP-Kv-4m5"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fl3-yd-NIN">
<rect key="frame" x="0.0" y="28" width="320" height="257"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="372"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Image" translatesAutoresizingMaskIntoConstraints="NO" id="b02-F2-S1G">
<rect key="frame" x="135" y="103" width="50" height="50"/>
<animations/>
<rect key="frame" x="162.5" y="161" width="50" height="50"/>
<constraints>
<constraint firstAttribute="width" constant="50" id="AbO-K8-a2R"/>
<constraint firstAttribute="height" constant="50" id="Ui7-Oz-DkV"/>
</constraints>
</imageView>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="b02-F2-S1G" firstAttribute="centerX" secondItem="fl3-yd-NIN" secondAttribute="centerX" id="KX5-HO-kIP"/>
<constraint firstItem="b02-F2-S1G" firstAttribute="centerY" secondItem="fl3-yd-NIN" secondAttribute="centerY" id="upR-Wu-743"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="H5o-9G-3fm">
<rect key="frame" x="0.0" y="293" width="320" height="275"/>
<rect key="frame" x="0.0" y="372" width="375" height="275"/>
<subviews>
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="3" minValue="1" maxValue="10" translatesAutoresizingMaskIntoConstraints="NO" id="S4w-Qm-Uy5">
<rect key="frame" x="101" y="20" width="118" height="31"/>
<animations/>
<rect key="frame" x="128.5" y="20" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="fx1-cr-NOG"/>
</constraints>
@@ -50,8 +46,7 @@
</connections>
</slider>
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="AGT-ka-xWt">
<rect key="frame" x="101" y="61" width="118" height="31"/>
<animations/>
<rect key="frame" x="128.5" y="61" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="Nzw-s8-nHW"/>
</constraints>
@@ -60,8 +55,7 @@
</connections>
</slider>
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="OuG-Ah-VZZ">
<rect key="frame" x="101" y="102" width="118" height="31"/>
<animations/>
<rect key="frame" x="128.5" y="102" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="Mh3-0r-dlH"/>
</constraints>
@@ -70,8 +64,7 @@
</connections>
</slider>
<slider opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="rzu-Eg-unI">
<rect key="frame" x="101" y="143" width="118" height="31"/>
<animations/>
<rect key="frame" x="128.5" y="143" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="hoD-XQ-jIb"/>
</constraints>
@@ -80,8 +73,7 @@
</connections>
</slider>
<slider opaque="NO" tag="1" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="2mN-dD-yv5">
<rect key="frame" x="101" y="184" width="118" height="31"/>
<animations/>
<rect key="frame" x="128.5" y="184" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="fvx-4w-Xla"/>
</constraints>
@@ -90,8 +82,7 @@
</connections>
</slider>
<slider opaque="NO" tag="2" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="Wh3-AW-Xwr">
<rect key="frame" x="101" y="225" width="118" height="31"/>
<animations/>
<rect key="frame" x="128.5" y="225" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="Hoc-2U-Wfn"/>
</constraints>
@@ -100,126 +91,125 @@
</connections>
</slider>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Radius" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XHK-dc-rMm">
<rect key="frame" x="52" y="67" width="41.5" height="17"/>
<animations/>
<rect key="frame" x="81" y="67.5" width="41.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Duration" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NTZ-GR-2Ti">
<rect key="frame" x="42.5" y="109" width="51" height="17"/>
<animations/>
<rect key="frame" x="71.5" y="108.5" width="51" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5Ae-iF-Uo2">
<rect key="frame" x="224" y="67" width="27.5" height="17"/>
<animations/>
<rect key="frame" x="252.5" y="67.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="enD-Za-KPs">
<rect key="frame" x="224" y="108" width="27.5" height="17"/>
<animations/>
<rect key="frame" x="252.5" y="108.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="byo-ur-zAu">
<rect key="frame" x="224" y="149" width="27.5" height="17"/>
<animations/>
<rect key="frame" x="252.5" y="149.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="16G-0A-ZRR">
<rect key="frame" x="224" y="190" width="27.5" height="17"/>
<animations/>
<rect key="frame" x="252.5" y="190.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cr8-K3-bbK">
<rect key="frame" x="224" y="231" width="27.5" height="17"/>
<animations/>
<rect key="frame" x="252.5" y="231.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="R" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="272-O8-NYD">
<rect key="frame" x="84" y="149" width="9.5" height="17"/>
<animations/>
<rect key="frame" x="113" y="149.5" width="9.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="G" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BhV-bI-fTv">
<rect key="frame" x="83" y="190" width="10.5" height="17"/>
<animations/>
<rect key="frame" x="112" y="190.5" width="10.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="B" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7O2-Ri-YuD">
<rect key="frame" x="84" y="231" width="9.5" height="17"/>
<animations/>
<rect key="frame" x="111.5" y="231.5" width="9.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Count" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2XQ-eP-qmu">
<rect key="frame" x="57" y="26" width="37" height="17"/>
<animations/>
<rect key="frame" x="85.5" y="26.5" width="37" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ike-SP-Oen">
<rect key="frame" x="224" y="26" width="27.5" height="17"/>
<animations/>
<rect key="frame" x="252.5" y="26.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="16G-0A-ZRR" firstAttribute="leading" secondItem="2mN-dD-yv5" secondAttribute="trailing" constant="7" id="0S0-mq-IaE"/>
<constraint firstItem="S4w-Qm-Uy5" firstAttribute="leading" secondItem="2XQ-eP-qmu" secondAttribute="trailing" constant="9" id="1VS-Be-eKf"/>
<constraint firstItem="16G-0A-ZRR" firstAttribute="leading" secondItem="2mN-dD-yv5" secondAttribute="trailing" constant="8" symbolic="YES" id="0S0-mq-IaE"/>
<constraint firstItem="S4w-Qm-Uy5" firstAttribute="leading" secondItem="2XQ-eP-qmu" secondAttribute="trailing" constant="8" symbolic="YES" id="1VS-Be-eKf"/>
<constraint firstItem="NTZ-GR-2Ti" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="H5o-9G-3fm" secondAttribute="leading" id="2Tq-qu-ljd"/>
<constraint firstItem="S4w-Qm-Uy5" firstAttribute="centerX" secondItem="H5o-9G-3fm" secondAttribute="centerX" id="55O-hU-VsY"/>
<constraint firstItem="2mN-dD-yv5" firstAttribute="leading" secondItem="BhV-bI-fTv" secondAttribute="trailing" constant="9" id="59s-V7-FVM"/>
<constraint firstItem="ike-SP-Oen" firstAttribute="leading" secondItem="S4w-Qm-Uy5" secondAttribute="trailing" constant="7" id="5vM-sn-DJh"/>
<constraint firstItem="ike-SP-Oen" firstAttribute="leading" secondItem="S4w-Qm-Uy5" secondAttribute="trailing" constant="8" symbolic="YES" id="5vM-sn-DJh"/>
<constraint firstItem="272-O8-NYD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="H5o-9G-3fm" secondAttribute="leading" id="7VK-Wg-BIJ"/>
<constraint firstItem="Cr8-K3-bbK" firstAttribute="centerY" secondItem="Wh3-AW-Xwr" secondAttribute="centerY" id="7yR-Ua-jfV"/>
<constraint firstItem="BhV-bI-fTv" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="H5o-9G-3fm" secondAttribute="leading" id="86e-fS-IkG"/>
<constraint firstItem="NTZ-GR-2Ti" firstAttribute="centerY" secondItem="OuG-Ah-VZZ" secondAttribute="centerY" id="C8m-g2-u6l"/>
<constraint firstItem="Wh3-AW-Xwr" firstAttribute="centerX" secondItem="H5o-9G-3fm" secondAttribute="centerX" id="DLb-lw-OeE"/>
<constraint firstItem="OuG-Ah-VZZ" firstAttribute="top" secondItem="AGT-ka-xWt" secondAttribute="bottom" constant="11" id="EIb-Hk-YLB"/>
<constraint firstItem="Cr8-K3-bbK" firstAttribute="leading" secondItem="Wh3-AW-Xwr" secondAttribute="trailing" constant="7" id="FmM-hA-vOJ"/>
<constraint firstItem="Cr8-K3-bbK" firstAttribute="leading" secondItem="Wh3-AW-Xwr" secondAttribute="trailing" constant="8" symbolic="YES" id="FmM-hA-vOJ"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="16G-0A-ZRR" secondAttribute="trailing" id="Hhe-mF-wVd"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="ike-SP-Oen" secondAttribute="trailing" id="I9c-pR-WFZ"/>
<constraint firstItem="AGT-ka-xWt" firstAttribute="centerX" secondItem="H5o-9G-3fm" secondAttribute="centerX" id="IWp-Bt-LxZ"/>
<constraint firstItem="AGT-ka-xWt" firstAttribute="leading" secondItem="XHK-dc-rMm" secondAttribute="trailing" constant="9" id="Lf4-jM-fdC"/>
<constraint firstItem="rzu-Eg-unI" firstAttribute="leading" secondItem="272-O8-NYD" secondAttribute="trailing" constant="9" id="Ohq-Ze-cX3"/>
<constraint firstItem="enD-Za-KPs" firstAttribute="leading" secondItem="OuG-Ah-VZZ" secondAttribute="trailing" constant="7" id="SBt-Oe-HHS"/>
<constraint firstItem="2XQ-eP-qmu" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="H5o-9G-3fm" secondAttribute="leading" id="LOS-CA-iot"/>
<constraint firstItem="AGT-ka-xWt" firstAttribute="leading" secondItem="XHK-dc-rMm" secondAttribute="trailing" constant="8" symbolic="YES" id="Lf4-jM-fdC"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="enD-Za-KPs" secondAttribute="trailing" id="NAG-ki-arM"/>
<constraint firstItem="7O2-Ri-YuD" firstAttribute="leading" secondItem="H5o-9G-3fm" secondAttribute="leading" constant="111.5" id="NBt-Bg-HyJ"/>
<constraint firstItem="rzu-Eg-unI" firstAttribute="leading" secondItem="272-O8-NYD" secondAttribute="trailing" constant="8" symbolic="YES" id="Ohq-Ze-cX3"/>
<constraint firstItem="enD-Za-KPs" firstAttribute="leading" secondItem="OuG-Ah-VZZ" secondAttribute="trailing" constant="8" symbolic="YES" id="SBt-Oe-HHS"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Cr8-K3-bbK" secondAttribute="trailing" id="Sdp-fR-V3V"/>
<constraint firstItem="rzu-Eg-unI" firstAttribute="centerX" secondItem="H5o-9G-3fm" secondAttribute="centerX" id="T3G-09-8X8"/>
<constraint firstItem="XHK-dc-rMm" firstAttribute="centerY" secondItem="AGT-ka-xWt" secondAttribute="centerY" id="VHf-aA-PzG"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5Ae-iF-Uo2" secondAttribute="trailing" id="Veg-Mb-PGI"/>
<constraint firstItem="S4w-Qm-Uy5" firstAttribute="top" secondItem="H5o-9G-3fm" secondAttribute="top" constant="20" id="X21-Qn-0zA"/>
<constraint firstItem="16G-0A-ZRR" firstAttribute="centerY" secondItem="2mN-dD-yv5" secondAttribute="centerY" id="XcJ-h3-lzT"/>
<constraint firstItem="5Ae-iF-Uo2" firstAttribute="leading" secondItem="AGT-ka-xWt" secondAttribute="trailing" constant="7" id="YDu-7d-Wce"/>
<constraint firstItem="Wh3-AW-Xwr" firstAttribute="leading" secondItem="7O2-Ri-YuD" secondAttribute="trailing" constant="9" id="ZAE-JC-hXx"/>
<constraint firstItem="5Ae-iF-Uo2" firstAttribute="leading" secondItem="AGT-ka-xWt" secondAttribute="trailing" constant="8" symbolic="YES" id="YDu-7d-Wce"/>
<constraint firstItem="Wh3-AW-Xwr" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="7O2-Ri-YuD" secondAttribute="trailing" constant="8" symbolic="YES" id="ZAE-JC-hXx"/>
<constraint firstAttribute="bottom" secondItem="Wh3-AW-Xwr" secondAttribute="bottom" constant="20" id="ZED-cL-keq"/>
<constraint firstItem="byo-ur-zAu" firstAttribute="centerY" secondItem="rzu-Eg-unI" secondAttribute="centerY" id="ZOK-zd-LpH"/>
<constraint firstItem="2XQ-eP-qmu" firstAttribute="centerY" secondItem="S4w-Qm-Uy5" secondAttribute="centerY" id="ZeT-be-2m9"/>
<constraint firstItem="XHK-dc-rMm" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="H5o-9G-3fm" secondAttribute="leading" id="dvy-nB-zgr"/>
<constraint firstItem="enD-Za-KPs" firstAttribute="centerY" secondItem="OuG-Ah-VZZ" secondAttribute="centerY" id="ho9-Jg-222"/>
<constraint firstItem="ike-SP-Oen" firstAttribute="centerY" secondItem="S4w-Qm-Uy5" secondAttribute="centerY" id="i00-Ha-wCf"/>
<constraint firstItem="byo-ur-zAu" firstAttribute="leading" secondItem="rzu-Eg-unI" secondAttribute="trailing" constant="7" id="jNP-0f-Feu"/>
<constraint firstItem="byo-ur-zAu" firstAttribute="leading" secondItem="rzu-Eg-unI" secondAttribute="trailing" constant="8" symbolic="YES" id="jNP-0f-Feu"/>
<constraint firstItem="BhV-bI-fTv" firstAttribute="centerY" secondItem="2mN-dD-yv5" secondAttribute="centerY" id="jws-PN-t1M"/>
<constraint firstItem="7O2-Ri-YuD" firstAttribute="centerY" secondItem="Wh3-AW-Xwr" secondAttribute="centerY" id="kG2-Jk-BlG"/>
<constraint firstItem="5Ae-iF-Uo2" firstAttribute="centerY" secondItem="AGT-ka-xWt" secondAttribute="centerY" id="lPs-UT-dL7"/>
<constraint firstItem="2mN-dD-yv5" firstAttribute="top" secondItem="rzu-Eg-unI" secondAttribute="bottom" constant="11" id="mKc-zP-Nky"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="byo-ur-zAu" secondAttribute="trailing" id="nwE-Xw-55t"/>
<constraint firstItem="Wh3-AW-Xwr" firstAttribute="top" secondItem="2mN-dD-yv5" secondAttribute="bottom" constant="11" id="sVi-Fd-e6i"/>
<constraint firstItem="OuG-Ah-VZZ" firstAttribute="leading" secondItem="NTZ-GR-2Ti" secondAttribute="trailing" constant="9" id="sn1-zO-D3f"/>
<constraint firstItem="OuG-Ah-VZZ" firstAttribute="leading" secondItem="NTZ-GR-2Ti" secondAttribute="trailing" constant="8" symbolic="YES" id="sn1-zO-D3f"/>
<constraint firstItem="2mN-dD-yv5" firstAttribute="centerX" secondItem="H5o-9G-3fm" secondAttribute="centerX" id="t6Z-LF-pD7"/>
<constraint firstItem="2mN-dD-yv5" firstAttribute="leading" secondItem="BhV-bI-fTv" secondAttribute="trailing" constant="8" symbolic="YES" id="tD1-e9-jys"/>
<constraint firstItem="OuG-Ah-VZZ" firstAttribute="centerX" secondItem="H5o-9G-3fm" secondAttribute="centerX" id="uu5-4w-m4L"/>
<constraint firstItem="AGT-ka-xWt" firstAttribute="top" secondItem="S4w-Qm-Uy5" secondAttribute="bottom" constant="11" id="vf1-7j-qLC"/>
<constraint firstItem="272-O8-NYD" firstAttribute="centerY" secondItem="rzu-Eg-unI" secondAttribute="centerY" id="ygA-Fv-FUB"/>
@@ -227,16 +217,16 @@
</constraints>
</view>
</subviews>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<viewLayoutGuide key="safeArea" id="JUs-QT-iwQ"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="SwP-Kv-4m5" firstAttribute="top" secondItem="H5o-9G-3fm" secondAttribute="bottom" id="8jE-Q9-oYO"/>
<constraint firstItem="H5o-9G-3fm" firstAttribute="top" secondItem="fl3-yd-NIN" secondAttribute="bottom" constant="8" id="EJE-a6-ToD"/>
<constraint firstAttribute="trailing" secondItem="fl3-yd-NIN" secondAttribute="trailing" id="FPN-mE-J31"/>
<constraint firstItem="fl3-yd-NIN" firstAttribute="top" secondItem="3co-dU-CDK" secondAttribute="bottom" constant="8" id="MAG-EU-MsG"/>
<constraint firstAttribute="trailing" secondItem="H5o-9G-3fm" secondAttribute="trailing" id="Vbn-XD-vG8"/>
<constraint firstItem="fl3-yd-NIN" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" id="maD-7v-ni3"/>
<constraint firstItem="H5o-9G-3fm" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" id="nbq-UD-MY7"/>
<constraint firstItem="fl3-yd-NIN" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" id="1s5-vF-55z"/>
<constraint firstItem="JUs-QT-iwQ" firstAttribute="bottom" secondItem="H5o-9G-3fm" secondAttribute="bottom" constant="20" id="8jE-Q9-oYO"/>
<constraint firstItem="H5o-9G-3fm" firstAttribute="top" secondItem="fl3-yd-NIN" secondAttribute="bottom" id="EJE-a6-ToD"/>
<constraint firstItem="fl3-yd-NIN" firstAttribute="top" secondItem="JUs-QT-iwQ" secondAttribute="top" id="MAG-EU-MsG"/>
<constraint firstItem="H5o-9G-3fm" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" id="TQv-SF-3bE"/>
<constraint firstAttribute="trailing" secondItem="fl3-yd-NIN" secondAttribute="trailing" id="Y9B-nw-fuL"/>
<constraint firstAttribute="trailing" secondItem="H5o-9G-3fm" secondAttribute="trailing" id="v3H-2m-SCt"/>
</constraints>
</view>
<connections>
@@ -257,10 +247,13 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="412" y="76"/>
<point key="canvasLocation" x="659.20000000000005" y="68.365817091454275"/>
</scene>
</scenes>
<resources>
<image name="Image" width="285" height="599"/>
<image name="Image" width="285" height="599.5"/>
<systemColor name="darkTextColor">
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>
@@ -1,5 +1,15 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
@@ -35,6 +45,12 @@
"idiom" : "iphone",
"filename" : "Icon-60@3x.png",
"scale" : "3x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-1024.png",
"scale" : "1x"
}
],
"info" : {
Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

@@ -1,6 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}
@@ -1,25 +0,0 @@
{
"images" : [
{
"orientation" : "portrait",
"idiom" : "iphone",
"filename" : "Default@2x.png",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "2x"
},
{
"extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "retina4",
"filename" : "Default-568h@2x.png",
"minimum-system-version" : "7.0",
"orientation" : "portrait",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

+8 -8
View File
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8191" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
@@ -14,16 +16,14 @@
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="bluetooth_book" translatesAutoresizingMaskIntoConstraints="NO" id="KgX-hc-3sO">
<rect key="frame" x="217" y="216" width="167" height="167"/>
<animations/>
<rect key="frame" x="104" y="250" width="167" height="167"/>
</imageView>
</subviews>
<animations/>
<color key="backgroundColor" red="0.0" green="0.45490196347236633" blue="0.75686275959014893" alpha="1" colorSpace="calibratedRGB"/>
<color key="backgroundColor" red="0.0" green="0.45490196347236633" blue="0.75686275959014893" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="KgX-hc-3sO" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="KVD-eD-Cmd"/>
<constraint firstItem="KgX-hc-3sO" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="ogK-3c-PFR"/>
+65 -28
View File
@@ -1,6 +1,13 @@
PulsingHalo
===========
**PulsingHalo has been discontinued, and is no longer being maintained.** Please check out **[Pulsator](https://github.com/shu223/Pulsator)** which is the new version of this written with Swift.
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Badge w/ Version](http://cocoapod-badges.herokuapp.com/v/PulsingHalo/badge.png)](http://cocoadocs.org/docsets/PulsingHalo)
[![License](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat
)](http://mit-license.org)
iOS component for creating a pulsing animation. It allows you to create halos.
![](demo_.gif)
@@ -10,38 +17,51 @@ Great For:
- **Pulses of beacons (iBeacon)**
- Map Annotations
##Installation
###CocoaPods
## Installation
Edit your Podfile.
### CocoaPods
````
Add into your Podfile.
```
pod "PulsingHalo"
````
```
And `$ pod install`
Then `$ pod install`
###Manual
### Carthage
Add into your Cartfile.
```
github "shu223/PulsingHalo"
```
Then `$ carthage update`
### Manual
Add PulsingHaloLayer.h,m into your project.
##How to use
## How to use
Just **initiate and add** to your view layer.
###Swift
### Swift
```swift.SomeViewController.swift
```swift
let halo = PulsingHaloLayer()
halo.position = view.center
view.layer.addSublayer(halo)
halo.start()
```
###Objective-C
### Objective-C
```objc:SomeViewController.m
```objc
PulsingHaloLayer *halo = [PulsingHaloLayer layer];
halo.position = self.view.center;
[self.view.layer addSublayer:halo];
@@ -51,60 +71,77 @@ halo.position = self.view.center;
##Customizations
## Customizations
###Number of Halos
### Number of Halos
Use `haloLayerNumber` property.
```
```objc
halo.haloLayerNumber = 3;
```
###radius
### radius
Use `radius` property.
````
```objc
self.halo.radius = 240.0;
````
```
###color
### color
Use `backgroundColor` property.
````
```objc
UIColor *color = [UIColor colorWithRed:0.7
green:0.9
blue:0.3
alpha:1.0];
self.halo.backgroundColor = color.CGColor;
````
```
###animation duration
### animation duration
Use `animationDuration` or `pulseInterval` property.
###animation repeat count
### animation repeat count
Initialize using `initWithRepeatCount:` method, or set `repeatCount` property. The default value is `INFINITY`.
###animation key values and times
### animation key values and times
Use properties `fromValueForRadius`, `fromValueForAlpha` and `keyTimeForHalfOpacity`.
Use properties `fromValueForRadius` or `keyTimeForHalfOpacity`.
### enable/disable timing function for animation
###enable/disable timing function for animation
Use property `useTimingFunction`
##Demo
## Demo
You can try to change the radius and color properties with demo app.
##Special Thanks
## Special Thanks
Inspired by [SVPulsingAnnotationView](https://github.com/samvermette/SVPulsingAnnotationView).
## Author
**Shuichi Tsutsumi**
iOS freelancer in Japan. Welcome works from abroad!
<a href="https://paypal.me/shu223">
<img alt="Support via PayPal" src="https://cdn.rawgit.com/twolfson/paypal-github-button/1.0.0/dist/button.svg"/>
</a>
- PAST WORKS: [My Profile Summary](https://medium.com/@shu223/my-profile-summary-f14bfc1e7099#.vdh0i7clr)
- PROFILES: [LinkedIn](https://www.linkedin.com/in/shuichi-tsutsumi-525b755b/)
- BLOG: [English](https://medium.com/@shu223/) / [Japanese](http://d.hatena.ne.jp/shu223/)
- CONTACTS:
- [Twitter](https://twitter.com/shu223)
- [Facebook](https://www.facebook.com/shuichi.tsutsumi)