90 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
shu223 51522193ba Updated README 2016-03-11 18:06:07 +09:00
shu223 bd18e04b04 Update podspec 2016-03-11 16:58:48 +09:00
shu223 29a5f78adb Update podspec 2016-03-11 16:53:35 +09:00
shu223 b10f9ccb97 Updated demo for new API. 2016-03-11 16:52:47 +09:00
shu223 fff46e1432 Updated APIs for dynamic customization 2016-03-11 16:36:37 +09:00
shu223 bf45450801 Updated README 2015-10-20 05:31:44 +09:00
shu223 5ed5c00a21 Minor update 2015-10-20 05:29:00 +09:00
shu223 eaf042515b Replaced demo.gif 2015-10-20 05:24:57 +09:00
shu223 f1585e98d8 - Enabled to change duration dynamically
- Updated demo & README
2015-10-20 05:15:03 +09:00
shu223 6a1098f3f6 Merge pull request #26 from dealforest/topic/CAReplicatorLayer
Modify using CAReplicatorLayer
2015-10-14 09:00:30 +09:00
Toshihiro Morimoto 5f58d7b601 Update README 2015-10-13 22:27:19 +09:00
Toshihiro Morimoto 71ffc48e02 Modify using CAReplicatorLayer 2015-10-13 22:22:41 +09:00
shu223 d07b140881 Minor changes for Xcode 7 2015-09-12 23:04:57 +09:00
shu223 c782ea35db Merge pull request #25 from ahui2823/master
fixed memory leak in haloLayerColor setter
2015-09-12 23:01:46 +09:00
Tianhui Huang b2d2571835 fixed memory leak in haloLayerColor setter 2015-09-10 17:28:05 +08:00
shu223 2bb83787b1 Merge pull request #22 from revolter/master
Added properties documentation
2015-05-31 09:37:03 +09:00
Iulian Onofrei 4aaf75924d This fixes shu223/PulsingHalo#16 2015-05-26 12:56:45 +03:00
Iulian Onofrei 5bffb487ab Added properties documentation 2015-05-26 12:39:31 +03:00
shu223 ebc6a477da Merge pull request #17 from jurvis/master
fixed xcode compiler warning
2015-05-01 10:12:02 +09:00
Jurvis Tan 721231790d fixed xcode compiler warning 2015-04-14 15:49:49 +08:00
shu223 ec864e8459 Update PulsingHalo.podspec 2015-03-26 14:14:20 +09:00
shu223 f3dbe609e6 Remove after finishing the animation 2015-02-18 21:08:43 +09:00
shu223 f8362bea17 Added UIKit import 2015-02-18 20:48:31 +09:00
shu223 2a923a618d Suppressed a warning 2015-02-18 20:44:03 +09:00
shu223 ebea8ca609 Update PulsingHalo.podspec 2014-07-19 14:17:42 +09:00
shu223 c68a466b45 Update PulsingHalo.podspec 2014-07-19 14:14:27 +09:00
shu223 9142eaae4f Merge pull request #10 from jiecao-fm/master
New class used for creating multiple layers of pulsing halos.
2014-07-14 19:35:54 +09:00
Shannon 0a008f18c0 add some comments 2014-07-08 18:13:08 +08:00
Shannon f2a9d25546 Merge branch 'master' of https://github.com/jiecao-fm/PulsingHalo 2014-07-08 18:12:15 +08:00
shannonchou 9d63f8cda1 update readme for multiple halos 2014-07-08 18:11:20 +08:00
Shannon 789f3bd73f Add new class MultiplePulsingHaloLayer, used for creating multiple layers of pulsing halos. 2014-07-08 11:54:04 +08:00
shu223 dc3967a371 Added usages for new properties 2014-06-01 14:36:34 -07:00
shu223 212fb7bcfb Added some properties to customize the animation 2014-06-01 14:26:04 -07:00
shu223 cfdf67ac2b Fixed a repeatCount problem in 64bit architecture. 2014-05-31 19:25:39 -07:00
shu223 bd8b8c3987 Merge pull request #9 from boctor/master
Added an init method with a repeatCount parameter since the init code ca...
2014-05-02 15:43:00 +09:00
Peter Boctor 268ae48941 Added an init method with a repeatCount parameter since the init code called setupAnimationGroup which resulted in the animationGroup always having an INFINITY repeatCount 2014-05-01 22:32:44 -07:00
shu223 7c56159388 Merge pull request #8 from runmad/master
Thanks!
2014-04-24 14:43:20 +09:00
Rune Madsen 56b459b6d2 repeatCount property 2014-04-23 16:05:53 -04:00
shu223 a097884047 Minor change for README 2013-12-10 09:40:15 +09:00
shu223 3df55ff97f supported cocoa pods 2013-12-07 05:10:10 +09:00
shu223 57e456ebfa Fixed the English sentence 2013-12-07 04:50:36 +09:00
shu223 e6c180bc4e Added pod spec 2013-12-07 04:37:07 +09:00
31 changed files with 1151 additions and 255 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
+14
View File
@@ -0,0 +1,14 @@
Pod::Spec.new do |s|
s.name = "PulsingHalo"
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.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
end
+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
+64 -4
View File
@@ -8,13 +8,73 @@
// Inspired by https://github.com/samvermette/SVPulsingAnnotationView
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface PulsingHaloLayer : CALayer
@interface PulsingHaloLayer : CAReplicatorLayer
@property (nonatomic, assign) CGFloat radius; // default:60pt
@property (nonatomic, assign) NSTimeInterval animationDuration; // default:3s
@property (nonatomic, assign) NSTimeInterval pulseInterval; // default is 0s
/**
* The default value of this property is @c 60pt.
*/
@property (nonatomic, assign) CGFloat radius;
/**
* The default value of this property is @c 0.0.
*/
@property (nonatomic, assign) CGFloat fromValueForRadius;
/**
* The default value of this property is @c 0.45.
*/
@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).
*
* The default value of this property is @c 0.2.
*/
@property (nonatomic, assign) CGFloat keyTimeForHalfOpacity;
/**
* The animation duration in seconds.
*
* The default value of this property is @c 3.
*/
@property (nonatomic, assign) NSTimeInterval animationDuration;
/**
* The animation interval in seconds.
*
* The default value of this property is @c 0.
*/
@property (nonatomic, assign) NSTimeInterval pulseInterval;
/**
* The default value of this property is @c YES.
*/
@property (nonatomic, assign) BOOL useTimingFunction;
/**
* The default value of this property is @c 1.
*/
@property (nonatomic, assign) NSInteger haloLayerNumber;
/**
* The animation delay in seconds.
*
* The default value of this property is @c 1.
*/
@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
+172 -44
View File
@@ -10,80 +10,208 @@
#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
@implementation PulsingHaloLayer
@dynamic repeatCount;
- (id)init {
- (instancetype)init
{
self = [super init];
if (self) {
self.effect = [CALayer new];
self.effect.contentsScale = [UIScreen mainScreen].scale;
self.effect.opacity = 0;
[self addSublayer:self.effect];
self.contentsScale = [UIScreen mainScreen].scale;
self.opacity = 0;
// default
self.radius = 60;
self.animationDuration = 3;
self.pulseInterval = 0;
self.backgroundColor = [[UIColor colorWithRed:0.000 green:0.478 blue:1.000 alpha:1] CGColor];
[self _setupDefaults];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
[self setupAnimationGroup];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification object:nil];
if(self.pulseInterval != INFINITY) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self addAnimation:self.animationGroup forKey:@"pulse"];
});
}
});
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onWillEnterForeground:)
name:UIApplicationWillEnterForegroundNotification object:nil];
}
return self;
}
- (void)setRadius:(CGFloat)radius {
_radius = radius;
CGPoint tempPos = self.position;
CGFloat diameter = self.radius * 2;
self.bounds = CGRectMake(0, 0, diameter, diameter);
self.cornerRadius = self.radius;
self.position = tempPos;
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)setupAnimationGroup {
- (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
- (void)start {
[self _setupAnimationGroup];
[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;
CAMediaTimingFunction *defaultCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
CGFloat diameter = self.radius * 2;
self.animationGroup = [CAAnimationGroup animation];
self.animationGroup.duration = self.animationDuration + self.pulseInterval;
self.animationGroup.repeatCount = INFINITY;
self.animationGroup.removedOnCompletion = NO;
self.animationGroup.timingFunction = defaultCurve;
self.effect.bounds = CGRectMake(0, 0, diameter, diameter);
self.effect.cornerRadius = self.radius;
}
- (void)setPulseInterval:(NSTimeInterval)pulseInterval {
_pulseInterval = pulseInterval;
if (_pulseInterval == INFINITY) {
[self.effect removeAnimationForKey:@"pulse"];
}
}
- (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;
_keyTimeForHalfOpacity = 0.2;
_animationDuration = 3;
_pulseInterval = 0;
_useTimingFunction = YES;
self.repeatCount = INFINITY;
self.radius = 60;
self.haloLayerNumber = 1;
self.startInterval = 1;
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;
if (self.useTimingFunction) {
CAMediaTimingFunction *defaultCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
animationGroup.timingFunction = defaultCurve;
}
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"];
scaleAnimation.fromValue = @0.0;
scaleAnimation.fromValue = @(self.fromValueForRadius);
scaleAnimation.toValue = @1.0;
scaleAnimation.duration = self.animationDuration;
CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.duration = self.animationDuration;
opacityAnimation.values = @[@0.45, @0.45, @0];
opacityAnimation.keyTimes = @[@0, @0.2, @1];
opacityAnimation.removedOnCompletion = NO;
CGFloat fromValueForAlpha = CGColorGetAlpha(self.backgroundColor);
opacityAnimation.values = @[@(fromValueForAlpha), @(fromValueForAlpha * 0.5), @0];
opacityAnimation.keyTimes = @[@0, @(self.keyTimeForHalfOpacity), @1];
NSArray *animations = @[scaleAnimation, opacityAnimation];
self.animationGroup.animations = animations;
animationGroup.animations = animations;
self.animationGroup = animationGroup;
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];
}
[self.effect removeFromSuperlayer];
[self removeFromSuperlayer];
}
@end
+216 -23
View File
@@ -7,6 +7,10 @@
objects = {
/* Begin PBXBuildFile section */
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 */; };
@@ -34,7 +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; };
@@ -59,6 +80,13 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8AB7E7D51C92DD87009A3BB6 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
8AC9070E1850659E00A74F2E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -82,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 */,
@@ -98,6 +137,7 @@
children = (
8AC907111850659E00A74F2E /* PulsingHaloDemo.app */,
8AC907321850659E00A74F2E /* PulsingHaloDemoTests.xctest */,
8AB7E7D91C92DD87009A3BB6 /* PulsingHalo.framework */,
);
name = Products;
sourceTree = "<group>";
@@ -116,13 +156,14 @@
8AC9071A1850659E00A74F2E /* PulsingHaloDemo */ = {
isa = PBXGroup;
children = (
8AC9071B1850659E00A74F2E /* Supporting Files */,
8AC9072C1850659E00A74F2E /* Images.xcassets */,
8AC907261850659E00A74F2E /* Main.storyboard */,
8A76D79D1BD4CC6B00C3881D /* Launch Screen.storyboard */,
8AC907231850659E00A74F2E /* AppDelegate.h */,
8AC907241850659E00A74F2E /* AppDelegate.m */,
8AC907261850659E00A74F2E /* Main.storyboard */,
8AC907291850659E00A74F2E /* ViewController.h */,
8AC9072A1850659E00A74F2E /* ViewController.m */,
8AC9072C1850659E00A74F2E /* Images.xcassets */,
8AC9071B1850659E00A74F2E /* Supporting Files */,
);
path = PulsingHaloDemo;
sourceTree = "<group>";
@@ -156,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" */;
@@ -175,6 +237,7 @@
8AC9070D1850659E00A74F2E /* Sources */,
8AC9070E1850659E00A74F2E /* Frameworks */,
8AC9070F1850659E00A74F2E /* Resources */,
8AB7E7E51C92DD88009A3BB6 /* Embed Frameworks */,
);
buildRules = (
);
@@ -209,9 +272,16 @@
8AC907091850659E00A74F2E /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0500;
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "Shuichi Tsutsumi";
TargetAttributes = {
8AB7E7D81C92DD87009A3BB6 = {
CreatedOnToolsVersion = 7.2.1;
};
8AC907101850659E00A74F2E = {
DevelopmentTeam = 9Z86A4AWDE;
ProvisioningStyle = Automatic;
};
8AC907311850659E00A74F2E = {
TestTargetID = 8AC907101850659E00A74F2E;
};
@@ -219,7 +289,7 @@
};
buildConfigurationList = 8AC9070C1850659E00A74F2E /* Build configuration list for PBXProject "PulsingHaloDemo" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
@@ -232,17 +302,26 @@
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;
files = (
8AC9072D1850659E00A74F2E /* Images.xcassets in Resources */,
8AC9071F1850659E00A74F2E /* InfoPlist.strings in Resources */,
8A76D79E1BD4CC6B00C3881D /* Launch Screen.storyboard in Resources */,
8AC907281850659E00A74F2E /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -258,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;
@@ -315,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;
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
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",
@@ -348,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;
};
@@ -358,30 +518,44 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
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;
};
@@ -391,10 +565,14 @@
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 = 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;
};
@@ -404,10 +582,14 @@
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 = 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;
};
@@ -416,7 +598,6 @@
8AC907471850659E00A74F2E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/PulsingHaloDemo.app/PulsingHaloDemo";
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
@@ -430,6 +611,7 @@
"$(inherited)",
);
INFOPLIST_FILE = "PulsingHaloDemoTests/PulsingHaloDemoTests-Info.plist";
PRODUCT_BUNDLE_IDENTIFIER = "Shuichi-Tsutsumi.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUNDLE_LOADER)";
WRAPPER_EXTENSION = xctest;
@@ -439,7 +621,6 @@
8AC907481850659E00A74F2E /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/PulsingHaloDemo.app/PulsingHaloDemo";
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
@@ -449,6 +630,7 @@
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "PulsingHaloDemo/PulsingHaloDemo-Prefix.pch";
INFOPLIST_FILE = "PulsingHaloDemoTests/PulsingHaloDemoTests-Info.plist";
PRODUCT_BUNDLE_IDENTIFIER = "Shuichi-Tsutsumi.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUNDLE_LOADER)";
WRAPPER_EXTENSION = xctest;
@@ -458,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 = (
@@ -474,6 +665,7 @@
8AC907451850659E00A74F2E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
8AC907461850659E00A74F2E /* Build configuration list for PBXNativeTarget "PulsingHaloDemoTests" */ = {
isa = XCConfigurationList;
@@ -482,6 +674,7 @@
8AC907481850659E00A74F2E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:PulsingHaloDemo.xcodeproj">
</FileRef>
</Workspace>
@@ -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>
+230 -105
View File
@@ -1,118 +1,244 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4514" systemVersion="13A3017" 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>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3747"/>
<deployment identifier="iOS"/>
<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="eWr-5e-3jC"/>
<viewControllerLayoutGuide type="bottom" id="H6a-sA-qU6"/>
</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>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="Image" translatesAutoresizingMaskIntoConstraints="NO" id="b02-F2-S1G">
<rect key="frame" x="134" y="141" width="50" height="50"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
<slider opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="AGT-ka-xWt">
<rect key="frame" x="100" y="311" width="118" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<connections>
<action selector="radiusChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="SlZ-3n-qKu"/>
</connections>
</slider>
<slider opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="rzu-Eg-unI">
<rect key="frame" x="100" y="352" width="118" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<connections>
<action selector="colorChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="vfj-vk-Eq8"/>
</connections>
</slider>
<slider opaque="NO" tag="1" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="2mN-dD-yv5">
<rect key="frame" x="100" y="393" width="118" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<connections>
<action selector="colorChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="9O5-24-Xz0"/>
</connections>
</slider>
<slider opaque="NO" tag="2" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="0.5" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="Wh3-AW-Xwr">
<rect key="frame" x="100" y="434" width="118" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<connections>
<action selector="colorChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="gsI-WD-P9h"/>
</connections>
</slider>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Radius" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XHK-dc-rMm">
<rect key="frame" x="44" y="321" width="50" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5Ae-iF-Uo2">
<rect key="frame" x="224" y="321" width="50" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="byo-ur-zAu">
<rect key="frame" x="224" y="362" width="50" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="16G-0A-ZRR">
<rect key="frame" x="224" y="403" width="50" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="1.00" lineBreakMode="clip" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cr8-K3-bbK">
<rect key="frame" x="224" y="444" width="50" height="14"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="R" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="272-O8-NYD">
<rect key="frame" x="44" y="360" width="50" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="G" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BhV-bI-fTv">
<rect key="frame" x="44" y="401" width="50" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="B" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7O2-Ri-YuD">
<rect key="frame" x="44" y="442" width="50" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fl3-yd-NIN">
<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="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>
<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="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="128.5" y="20" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="fx1-cr-NOG"/>
</constraints>
<connections>
<action selector="countChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="x6Y-R7-Kme"/>
</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="128.5" y="61" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="Nzw-s8-nHW"/>
</constraints>
<connections>
<action selector="radiusChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="SlZ-3n-qKu"/>
</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="128.5" y="102" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="Mh3-0r-dlH"/>
</constraints>
<connections>
<action selector="durationChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="XCr-dq-Ve7"/>
</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="128.5" y="143" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="hoD-XQ-jIb"/>
</constraints>
<connections>
<action selector="colorChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="vfj-vk-Eq8"/>
</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="128.5" y="184" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="fvx-4w-Xla"/>
</constraints>
<connections>
<action selector="colorChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="9O5-24-Xz0"/>
</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="128.5" y="225" width="118" height="31"/>
<constraints>
<constraint firstAttribute="width" constant="114" id="Hoc-2U-Wfn"/>
</constraints>
<connections>
<action selector="colorChanged:" destination="vXZ-lx-hvc" eventType="valueChanged" id="gsI-WD-P9h"/>
</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="81" y="67.5" width="41.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="71.5" y="108.5" width="51" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="252.5" y="67.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="252.5" y="108.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="252.5" y="149.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="252.5" y="190.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="252.5" y="231.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="113" y="149.5" width="9.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="112" y="190.5" width="10.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="111.5" y="231.5" width="9.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="85.5" y="26.5" width="37" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<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="252.5" y="26.5" width="27.5" height="17"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<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="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="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="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="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="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="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="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"/>
<constraint firstItem="rzu-Eg-unI" firstAttribute="top" secondItem="OuG-Ah-VZZ" secondAttribute="bottom" constant="11" id="zbp-a6-hjL"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="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="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>
<outlet property="bLabel" destination="Cr8-K3-bbK" id="bnR-Cq-Ix7"/>
<outlet property="bSlider" destination="Wh3-AW-Xwr" id="wSf-0R-oMf"/>
<outlet property="beaconView" destination="b02-F2-S1G" id="J6u-U8-tkr"/>
<outlet property="countLabel" destination="ike-SP-Oen" id="DLA-9U-YeR"/>
<outlet property="countSlider" destination="S4w-Qm-Uy5" id="dPk-j1-b6w"/>
<outlet property="durationLabel" destination="enD-Za-KPs" id="bri-wE-Ec3"/>
<outlet property="durationSlider" destination="OuG-Ah-VZZ" id="chi-ED-0hU"/>
<outlet property="gLabel" destination="16G-0A-ZRR" id="ZcK-ES-G54"/>
<outlet property="gSlider" destination="2mN-dD-yv5" id="2My-xV-6nP"/>
<outlet property="gSlider" destination="2mN-dD-yv5" id="1mW-tE-Jap"/>
<outlet property="rLabel" destination="byo-ur-zAu" id="rdc-zc-0qO"/>
<outlet property="rSlider" destination="rzu-Eg-unI" id="8Yn-se-50Q"/>
<outlet property="radiusLabel" destination="5Ae-iF-Uo2" id="rad-VL-EIU"/>
@@ -121,14 +247,13 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
</objects>
<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>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
</document>
</document>
@@ -2,18 +2,55 @@
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-Small@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-Small@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -6,8 +6,12 @@
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "IPhone_5s.png"
"filename" : "IPhone_5s.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
@@ -1,23 +0,0 @@
{
"images" : [
{
"orientation" : "portrait",
"idiom" : "iphone",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "2x"
},
{
"orientation" : "portrait",
"idiom" : "iphone",
"subtype" : "retina4",
"extent" : "full-screen",
"minimum-system-version" : "7.0",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "bluetooth_book.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
+41
View File
@@ -0,0 +1,41 @@
<?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="19144"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<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="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="104" y="250" width="167" height="167"/>
</imageView>
</subviews>
<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"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="bluetooth_book" width="167" height="167"/>
</resources>
</document>
+3 -3
View File
@@ -9,7 +9,7 @@
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>Shuichi-Tsutsumi.${PRODUCT_NAME:rfc1034identifier}</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@@ -24,6 +24,8 @@
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>Launch Screen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
@@ -33,8 +35,6 @@
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
+52 -15
View File
@@ -3,23 +3,29 @@
// PulsingHaloDemo
//
// Created by shuichi on 12/5/13.
// Modified by ShannonChou on 14-7-8
// Copyright (c) 2013 Shuichi Tsutsumi. All rights reserved.
//
#import "ViewController.h"
#import "PulsingHaloLayer.h"
#define kMaxRadius 160
#define kMaxRadius 200
#define kMaxDuration 10
@interface ViewController ()
@property (nonatomic, strong) PulsingHaloLayer *halo;
@property (nonatomic, weak) PulsingHaloLayer *halo;
@property (nonatomic, weak) IBOutlet UIImageView *beaconView;
@property (nonatomic, weak) IBOutlet UISlider *countSlider;
@property (nonatomic, weak) IBOutlet UISlider *radiusSlider;
@property (nonatomic, weak) IBOutlet UISlider *durationSlider;
@property (nonatomic, weak) IBOutlet UISlider *rSlider;
@property (nonatomic, weak) IBOutlet UISlider *gSlider;
@property (nonatomic, weak) IBOutlet UISlider *bSlider;
@property (nonatomic, weak) IBOutlet UILabel *countLabel;
@property (nonatomic, weak) IBOutlet UILabel *radiusLabel;
@property (nonatomic, weak) IBOutlet UILabel *durationLabel;
@property (nonatomic, weak) IBOutlet UILabel *rLabel;
@property (nonatomic, weak) IBOutlet UILabel *gLabel;
@property (nonatomic, weak) IBOutlet UILabel *bLabel;
@@ -32,17 +38,26 @@
{
[super viewDidLoad];
self.halo = [PulsingHaloLayer layer];
self.halo.position = self.beaconView.center;
[self.view.layer insertSublayer:self.halo below:self.beaconView.layer];
// basic setup
PulsingHaloLayer *layer = [PulsingHaloLayer layer];
self.halo = layer;
[self.beaconView.superview.layer insertSublayer:self.halo below:self.beaconView.layer];
[self setupInitialValues];
[self.halo start];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.halo.position = self.beaconView.center;
}
@@ -50,13 +65,19 @@
#pragma mark - Private
- (void)setupInitialValues {
self.countSlider.value = 5;
[self countChanged:nil];
self.radiusSlider.value = 0.5;
self.radiusSlider.value = 0.7;
[self radiusChanged:nil];
self.rSlider.value = 0;
self.gSlider.value = 0.487;
self.bSlider.value = 1.0;
self.durationSlider.value = 0.5;
[self durationChanged:nil];
self.rSlider.value = 0.;
self.gSlider.value = 0.455;
self.bSlider.value = 0.756;
[self colorChanged:nil];
}
@@ -64,10 +85,26 @@
// =============================================================================
#pragma mark - IBAction
- (IBAction)countChanged:(UISlider *)sender {
//you can specify the number of halos by initial method or by instance property "haloLayerNumber"
float value = floor(self.countSlider.value);
self.halo.haloLayerNumber = value;
self.countLabel.text = [@(value) stringValue];
}
- (IBAction)radiusChanged:(UISlider *)sender {
self.halo.radius = self.radiusSlider.value * kMaxRadius;
self.radiusLabel.text = [@(self.radiusSlider.value) stringValue];
self.radiusLabel.text = [NSString stringWithFormat:@"%.0f", self.radiusSlider.value * kMaxRadius];
}
- (IBAction)durationChanged:(UISlider *)sender {
self.halo.animationDuration = self.durationSlider.value * kMaxDuration;
self.durationLabel.text = [NSString stringWithFormat:@"%.1f", self.durationSlider.value * kMaxDuration];
}
- (IBAction)colorChanged:(UISlider *)sender {
@@ -77,11 +114,11 @@
blue:self.bSlider.value
alpha:1.0];
self.halo.backgroundColor = color.CGColor;
[self.halo setBackgroundColor:color.CGColor];
self.rLabel.text = [@(self.rSlider.value) stringValue];
self.gLabel.text = [@(self.gSlider.value) stringValue];
self.bLabel.text = [@(self.bSlider.value) stringValue];
self.rLabel.text = [NSString stringWithFormat:@"%.2f", self.rSlider.value];
self.gLabel.text = [NSString stringWithFormat:@"%.2f", self.gSlider.value];
self.bLabel.text = [NSString stringWithFormat:@"%.2f", self.bSlider.value];
}
@end
@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>Shuichi-Tsutsumi.${PRODUCT_NAME:rfc1034identifier}</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
+110 -24
View File
@@ -1,61 +1,147 @@
PulsingHalo
===========
A CALayer subclass for indicating Pulsing Halo.
**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.
![](http://f.cl.ly/items/220D2F210D1x1D0L1Q20/beacon__.gif)
[![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)
It's useful for:
iOS component for creating a pulsing animation. It allows you to create halos.
- **iBeacon**
- annotions in MapKit
![](demo_.gif)
Great For:
##How to use
- **Pulses of beacons (iBeacon)**
- Map Annotations
1. Add PulsingHaloLayer.h,m into your project
2. Initiate and add to your view.
````
## Installation
### CocoaPods
Add into your Podfile.
```
pod "PulsingHalo"
```
Then `$ pod install`
### Carthage
Add into your Cartfile.
```
github "shu223/PulsingHalo"
```
Then `$ carthage update`
### Manual
Add PulsingHaloLayer.h,m into your project.
## How to use
Just **initiate and add** to your view layer.
### Swift
```swift
let halo = PulsingHaloLayer()
halo.position = view.center
view.layer.addSublayer(halo)
halo.start()
```
### Objective-C
```objc
PulsingHaloLayer *halo = [PulsingHaloLayer layer];
halo.position = self.view.center;
[self.view.layer addSublayer:halo];
````
[halo start];
```
##Customization
###radius
## Customizations
### Number of Halos
Use `haloLayerNumber` property.
```objc
halo.haloLayerNumber = 3;
```
### 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.
##Demo
### animation repeat count
You can try to change radius and color properties with demo app.
![](http://f.cl.ly/items/031W0P1T190q382P063m/beacon_demo3.jpg)
Initialize using `initWithRepeatCount:` method, or set `repeatCount` property. The default value is `INFINITY`.
##Special Thanks
### animation key values and times
It's inspired by [SVPulsingAnnotationView](https://github.com/samvermette/SVPulsingAnnotationView).
Use properties `fromValueForRadius` or `keyTimeForHalfOpacity`.
### enable/disable timing function for animation
Use property `useTimingFunction`
## Demo
You can try to change the radius and color properties with demo app.
## 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)
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB