.
30 |
31 | ### Manually
32 | 1. Drag all source files under floder `FHHFPSIndicator` to your project
33 | 2. Import the main header file:`#import "FHHFPSIndicator.h"`
34 |
35 | ###Instruction
36 | you shoud call after the keyWindw becomes keyAndVisible;
37 |
38 | Advice:Use FHHFPSIndicator in DEBUG mode
39 |
40 | add the code in AppDelegate.m
41 |
42 |
43 | #if defined(DEBUG) || defined(_DEBUG)
44 | #import "FHHFPSIndicator.h"
45 | #endif
46 |
47 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
48 | // Override point for customization after application launch.
49 |
50 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
51 | [self.window makeKeyAndVisible];
52 |
53 | // add the follwing code after the window become keyAndVisible
54 | #if defined(DEBUG) || defined(_DEBUG)
55 | [[FHHFPSIndicator sharedFPSIndicator] show];
56 | // [FHHFPSIndicator sharedFPSIndicator].fpsLabelPosition = FPSIndicatorPositionTopRight;
57 | #endif
58 |
59 | self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[HomeViewController alloc] init]];
60 |
61 | return YES;
62 | }
63 |
64 |
65 |
66 | License
67 | ==============
68 | FHHFPSIndicator is provided under the MIT license. See LICENSE file for details.
69 |
70 |
71 | ---
72 | 中文介绍
73 | ==============
74 | FHHFPSIndicator可以用于在iOS开发中显示当前画面的FPS.
75 |
76 | 演示项目
77 | ==============
78 | 查看并运行 `Demo/FHHFPSIndicatorDemo`
79 |
80 |
81 | 
82 |
83 | 
84 |
85 | 
86 |
87 | 
88 |
89 | 安装
90 | ==============
91 |
92 | ### CocoaPods
93 |
94 | 1. 在 Podfile 中添加 `pod "FHHFPSIndicator"`。
95 | 2. 执行 `pod install` 或 `pod update`。
96 | 3. 导入 \。
97 |
98 | ### 手动安装
99 | 1. 将`FHHFPSIndicator`文件夹中的所有源代码拽入项目中。
100 | 2. 导入主头文件:`#import "FHHFPSIndicator.h"`。
101 |
102 | ###使用说明
103 | 在AppDelegate.m文件中的didFinishLaunchingWithOptions方法中,当执行了`[self.window makeKeyAndVisible];`后,调用`[[FHHFPSIndicator sharedFPSIndicator] show]`。
104 | 建议:在DEBUG模式下使用显示FPS功能
105 |
106 |
107 | #if defined(DEBUG) || defined(_DEBUG)
108 | #import "FHHFPSIndicator.h"
109 | #endif
110 |
111 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
112 | // Override point for customization after application launch.
113 |
114 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
115 | [self.window makeKeyAndVisible];
116 |
117 | // add the follwing code after the window become keyAndVisible
118 | #if defined(DEBUG) || defined(_DEBUG)
119 | [[FHHFPSIndicator sharedFPSIndicator] show];
120 | // [FHHFPSIndicator sharedFPSIndicator].fpsLabelPosition = FPSIndicatorPositionTopRight;
121 | #endif
122 |
123 | self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[[HomeViewController alloc] init]];
124 |
125 | return YES;
126 | }
127 |
128 |
129 |
130 | 许可证
131 | ==============
132 | FHHFPSIndicator 使用 MIT 许可证,详情见 LICENSE 文件。
133 |
--------------------------------------------------------------------------------
/FHHFPSIndicator/FHHFPSIndicator.m:
--------------------------------------------------------------------------------
1 | //
2 | // FHHFPSIndicator.m
3 | // FHHFPSIndicator
4 | //
5 | // Created by 002 on 16/6/27.
6 | // Copyright © 2016年 002. All rights reserved.
7 | //
8 |
9 | #import "FHHFPSIndicator.h"
10 |
11 | #define kScreenWidth ([[UIScreen mainScreen] bounds].size.width)
12 | #define SIZE_fpsLabel CGSizeMake(44, 15)
13 | #define FONT_SIZE_fpsLabel (12)
14 | #define TAG_fpsLabel (110213)
15 | #define TEXTCOLOR_fpsLabel ([UIColor colorWithRed:85 / 255.0 green:214 / 255.0 blue:110 / 255.0 alpha:1.00])
16 | #define PADDING_TOP_fpsLabel (15)
17 |
18 | #if TARGET_IPHONE_SIMULATOR // SIMULATOR
19 | #define PADDING_LEFT_fpsLabel (47)
20 | #define PADDING_RIGHT_fpsLabel (9)
21 | #define PADDING_CENTER_fpsLabel (1)
22 | #elif TARGET_OS_IPHONE // iPhone
23 | #define PADDING_LEFT_fpsLabel (36)
24 | #define PADDING_RIGHT_fpsLabel (-3)
25 | #define PADDING_CENTER_fpsLabel (3)
26 | #endif
27 |
28 | @interface FHHFPSIndicator ()
29 |
30 | {
31 | CADisplayLink *_displayLink;
32 | NSTimeInterval _lastTime;
33 | NSUInteger _count;
34 | }
35 |
36 | @property (nonatomic, strong) UILabel *fpsLabel;
37 |
38 | @end
39 |
40 | @implementation FHHFPSIndicator
41 |
42 | + (FHHFPSIndicator *)sharedFPSIndicator {
43 | static dispatch_once_t onceToken;
44 | static FHHFPSIndicator *_instance;
45 | dispatch_once(&onceToken, ^{
46 | _instance = [[FHHFPSIndicator alloc] init];
47 | });
48 | return _instance;
49 | }
50 |
51 | - (id)init {
52 | if (self = [super init]) {
53 | _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(p_displayLinkTick:)];
54 | [_displayLink setPaused:YES];
55 | [_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
56 |
57 | // create fpsLabel
58 | _fpsLabel = [[UILabel alloc] init];
59 | self.fpsLabelPosition = FPSIndicatorPositionBottomCenter;
60 | _fpsLabel.tag = TAG_fpsLabel;
61 |
62 | // set style for fpsLabel
63 | [self p_configFPSLabel];
64 |
65 | [[NSNotificationCenter defaultCenter] addObserver: self
66 | selector: @selector(applicationDidBecomeActiveNotification)
67 | name: UIApplicationDidBecomeActiveNotification
68 | object: nil];
69 |
70 | [[NSNotificationCenter defaultCenter] addObserver: self
71 | selector: @selector(applicationWillResignActiveNotification)
72 | name: UIApplicationWillResignActiveNotification
73 | object: nil];
74 |
75 |
76 | }
77 | return self;
78 | }
79 |
80 | /**
81 | You can change the fpsLabel style for your app in this function
82 | */
83 | - (void)p_configFPSLabel {
84 | _fpsLabel.font = [UIFont boldSystemFontOfSize:FONT_SIZE_fpsLabel];
85 | _fpsLabel.backgroundColor = [UIColor clearColor];
86 | _fpsLabel.textColor = TEXTCOLOR_fpsLabel;
87 | _fpsLabel.textAlignment = NSTextAlignmentCenter;
88 | }
89 |
90 | - (void)p_displayLinkTick:(CADisplayLink *)link {
91 | if (_lastTime == 0) {
92 | _lastTime = link.timestamp;
93 | return;
94 | }
95 |
96 | _count++;
97 | NSTimeInterval delta = link.timestamp - _lastTime;
98 | if (delta < 1) {
99 | return;
100 | }
101 | _lastTime = link.timestamp;
102 | float fps = _count / delta;
103 | _count = 0;
104 | NSString *text = [NSString stringWithFormat:@"%d FPS",(int)round(fps)];
105 | [_fpsLabel setText: text];
106 | }
107 |
108 | - (void)show {
109 | UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
110 | for (NSUInteger i = 0; i < keyWindow.subviews.count; ++i) {
111 | UIView *view = keyWindow.subviews[keyWindow.subviews.count - 1 - i];
112 | if ([view isKindOfClass:[UILabel class]] && view.tag == TAG_fpsLabel) {
113 | return;
114 | }
115 | }
116 | [_displayLink setPaused:NO];
117 | [keyWindow addSubview:_fpsLabel];
118 | }
119 |
120 | - (void)hide {
121 | [_displayLink setPaused:YES];
122 | UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
123 | for (UIView *label in keyWindow.subviews) {
124 | if ([label isKindOfClass:[UILabel class]]&& label.tag == TAG_fpsLabel) {
125 | [label removeFromSuperview];
126 | return;
127 | }
128 | }
129 | }
130 |
131 | - (BOOL)isShowingFps {
132 | if (_fpsLabel.superview != nil) {
133 | return YES;
134 | }
135 | return NO;
136 | }
137 |
138 | #pragma mark - notification
139 | - (void)applicationDidBecomeActiveNotification {
140 | [_displayLink setPaused:NO];
141 | }
142 |
143 | - (void)applicationWillResignActiveNotification {
144 | [_displayLink setPaused:YES];
145 | }
146 |
147 | #pragma mark - setter
148 | - (void)setFpsLabelPosition:(FPSIndicatorPosition)fpsLabelPosition {
149 | _fpsLabelPosition = fpsLabelPosition;
150 | switch (_fpsLabelPosition) {
151 | case FPSIndicatorPositionTopLeft:
152 | _fpsLabel.frame = CGRectMake((kScreenWidth - SIZE_fpsLabel.width) / 2 - PADDING_LEFT_fpsLabel - 1, 2.5, SIZE_fpsLabel.width, SIZE_fpsLabel.height);
153 | break;
154 | case FPSIndicatorPositionTopRight:
155 | _fpsLabel.frame = CGRectMake((kScreenWidth + SIZE_fpsLabel.width) / 2 + (PADDING_RIGHT_fpsLabel) , 2.5, SIZE_fpsLabel.width, SIZE_fpsLabel.height);
156 | break;
157 | case FPSIndicatorPositionBottomCenter:
158 | _fpsLabel.frame = CGRectMake((kScreenWidth - SIZE_fpsLabel.width) / 2 + PADDING_CENTER_fpsLabel, PADDING_TOP_fpsLabel, SIZE_fpsLabel.width, SIZE_fpsLabel.height);
159 | break;
160 | default:
161 | break;
162 | }
163 | }
164 |
165 | - (void)setFpsLabelColor:(UIColor *)color {
166 | if (color == nil) {
167 | _fpsLabel.textColor = TEXTCOLOR_fpsLabel;
168 | } else {
169 | _fpsLabel.textColor = color;
170 | }
171 | }
172 |
173 | @end
174 |
--------------------------------------------------------------------------------
/Demo/FHHFPSIndicatorDemo/Utility/UIViewController+CustomNavigationBar.m:
--------------------------------------------------------------------------------
1 | //
2 | // ************************************************************************
3 | //
4 | // UIViewController+CustomNavigationBar.m
5 | // LoveTourGuide
6 | //
7 | // Created by 002 on 2017/7/26.
8 | // Copyright © 2017年 hqyxedu. All rights reserved.
9 | //
10 | // Main function:自定义导航栏控制器分类
11 | //
12 | // Other specifications:
13 | //
14 | // ************************************************************************
15 |
16 | #import "UIViewController+CustomNavigationBar.h"
17 | #import "UIView+FHH.h"
18 | #import
19 |
20 | #define RGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
21 | #define KColorBlue RGBColor(0, 160, 233)
22 | #define ScreenWidth ([[UIScreen mainScreen] bounds].size.width)
23 |
24 | const char *NavigationBarKey = "navigationBar";
25 | const char *NavMiddleButtonKey = "navMiddleButton";
26 | const char *NavLeftButtonKey = "navLeftButton";
27 | const char *NavRightButtonKey = "navRightButton";
28 | const char *IsPushedKey = "IsPushed";
29 |
30 | @implementation UIViewController (CustomNavigationBar)
31 |
32 | #pragma mark - 导航栏
33 | - (void)setNavigationBarTitle:(NSString *)title {
34 | [self setNavigationBarTitle:title
35 | navLeftButtonIcon:nil
36 | navRightButtonIcon:nil
37 | navRightButtonTitle:nil];
38 | self.navLeftButton.hidden = YES;
39 | }
40 |
41 | - (void)setNavigationBarTitle:(NSString *)title navLeftButtonIcon:(NSString *)navLeftButtonIcon {
42 | [self setNavigationBarTitle:title
43 | navLeftButtonIcon:navLeftButtonIcon
44 | navRightButtonIcon:nil
45 | navRightButtonTitle:nil];
46 | }
47 |
48 | - (void)setNavigationBarTitle:(NSString *)title
49 | navLeftButtonIcon:(NSString *)navLeftButtonIcon
50 | navRightButtonTitle:(NSString *)navRightButtonTitle {
51 |
52 | [self setNavigationBarTitle:title
53 | navLeftButtonIcon:navLeftButtonIcon
54 | navRightButtonIcon:nil
55 | navRightButtonTitle:navRightButtonTitle];
56 | }
57 |
58 | - (void)setNavigationBarTitle:(NSString *)title
59 | navLeftButtonIcon:(NSString *)navLeftButtonIcon
60 | navRightButtonIcon:(NSString *)navRightButtonIcon {
61 |
62 | [self setNavigationBarTitle:title
63 | navLeftButtonIcon:navLeftButtonIcon
64 | navRightButtonIcon:navRightButtonIcon
65 | navRightButtonTitle:nil];
66 | }
67 |
68 | - (void)setNavigationBarTitle:(NSString *)title
69 | navLeftButtonIcon:(NSString *)navLeftButtonIcon
70 | navRightButtonIcon:(NSString *)navRightButtonIcon
71 | navRightButtonTitle:(NSString *)navRightButtonTitle {
72 | [self pc_configCustomNavigationBar];
73 | [self pc_configCustomNavLeftButtonWithNavLeftButtonIcon:navLeftButtonIcon];
74 | [self pc_configCustomNavRightButtonWithNavRightButtonIcon:navRightButtonIcon
75 | navRightButtonTitle:navRightButtonTitle];
76 | [self pc_configCustomNavMiddleButtonWithTitle:title];
77 | [self pc_configBottomSepImageView];
78 | }
79 |
80 | - (void)pc_configCustomNavigationBar {
81 | if (self.navigationController.navigationBar != nil) {
82 | [self.navigationController.navigationBar removeFromSuperview];
83 | }
84 | if (self.navigationBar != nil) {
85 | [self.navigationBar removeFromSuperview];
86 | }
87 | self.isPushed = YES;
88 | // 1.自定义UIView代替导航栏
89 | // 1.1) 创建并定义属性
90 | self.navigationBar = [[UIView alloc] init];
91 | self.navigationBar.frame = CGRectMake(0, 0, ScreenWidth, 64.0);
92 | self.navigationBar.backgroundColor = RGBColor(0, 160, 233);
93 | [self.view addSubview:self.navigationBar];
94 | }
95 |
96 | - (void)pc_configCustomNavLeftButtonWithNavLeftButtonIcon:(NSString *)NavLeftButtonIcon {
97 | // 2.‘左边’ 按钮
98 | self.navLeftButton = [[UIButton alloc] init];
99 | self.navLeftButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
100 | if (!NavLeftButtonIcon || [@"" isEqualToString:NavLeftButtonIcon]) {
101 | NavLeftButtonIcon = @"nav_return";
102 | self.navLeftButton.hidden = YES;
103 | }
104 | [self.navLeftButton addTarget:self action:@selector(clickLeftNavButton) forControlEvents:UIControlEventTouchUpInside];
105 | [self.navLeftButton setImage:[UIImage imageNamed:NavLeftButtonIcon] forState:UIControlStateNormal];
106 | [self configLeftButton];
107 | [self p_configLeftButtonEdgeInsets];
108 | }
109 |
110 | - (void)pc_configCustomNavRightButtonWithNavRightButtonIcon:(NSString *)NavRightButtonIcon
111 | navRightButtonTitle:(NSString *)navRightButtonTitle {
112 | if (NavRightButtonIcon || navRightButtonTitle) {
113 | self.navRightButton = [UIButton buttonWithType:UIButtonTypeCustom];
114 | self.navRightButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
115 | if (navRightButtonTitle && ![@"" isEqualToString:navRightButtonTitle]) {
116 | [self.navRightButton setTitle:navRightButtonTitle forState:UIControlStateNormal];
117 | }
118 | if (NavRightButtonIcon && ![@"" isEqualToString:NavRightButtonIcon]) {
119 | [self.navRightButton setImage:[UIImage imageNamed:NavRightButtonIcon] forState:UIControlStateNormal];
120 | }
121 | self.navRightButton.titleLabel.font = [UIFont systemFontOfSize:T5_30PX];
122 | [self.navRightButton setTitleColor:kColorC4_1 forState:UIControlStateNormal];
123 | [self.navigationBar addSubview:self.navRightButton];
124 | [self reConfigNavRightButton];
125 | [self p_configRightButtonEdgeInsets];
126 | }
127 | }
128 |
129 | - (void)pc_configCustomNavMiddleButtonWithTitle:(NSString *)title {
130 | if (title && ![@"" isEqualToString:title]) {
131 | [self addBarMiddleButtonWithTitle:title];
132 | }
133 | }
134 |
135 | - (void)addBarMiddleButtonWithTitle:(NSString *)title {
136 | self.navMiddleButton = [[UIButton alloc] init];
137 | self.navMiddleButton.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
138 | [self.navMiddleButton setTitle:title forState:UIControlStateNormal];
139 | [self.navMiddleButton setTitleColor:kColorC4_1 forState:UIControlStateNormal];
140 | self.navMiddleButton.titleLabel.font = [UIFont systemFontOfSize:T3_34PX];
141 | [self reConfigNavMiddleButton];
142 |
143 | // 添加到当前view
144 | [self.navigationBar addSubview:self.navMiddleButton];
145 | }
146 |
147 | - (void)pc_configBottomSepImageView {
148 | CGRect frame = CGRectMake(0, self.navigationBar.height - 0.5, self.navigationBar.width, 0.5);
149 | UIImageView *bottomSepImageView = [[UIImageView alloc] initWithFrame:frame];
150 | [self.navigationBar addSubview:bottomSepImageView];
151 | bottomSepImageView.backgroundColor = kColorC3_1;
152 | }
153 |
154 | - (void)configLeftButton {
155 | [self.navLeftButton sizeToFit];
156 | self.navLeftButton.frame = CGRectMake(0, 28 , 50, 64);
157 | self.navLeftButton.bottom = self.navigationBar.height;
158 | [self.navigationBar addSubview:self.navLeftButton];
159 | }
160 |
161 | - (void)p_configLeftButtonEdgeInsets {
162 | self.navLeftButton.imageEdgeInsets = UIEdgeInsetsMake((50 - 30), S3_PAGE_PADDING_30PX, 0, 0);
163 | }
164 |
165 | - (void)p_configRightButtonEdgeInsets {
166 | CGSize imageSize = self.navRightButton.imageView.size;
167 | CGSize titleSize = self.navRightButton.titleLabel.size;
168 | CGFloat imageLeftInset = (self.navRightButton.width - imageSize.width - MARGIN_COMMON);
169 | CGFloat titleLeftInset = (self.navRightButton.width - titleSize.width - MARGIN_COMMON + 2);
170 |
171 | self.navRightButton.imageEdgeInsets = UIEdgeInsetsMake(0, imageLeftInset, 0, -imageLeftInset);
172 | self.navRightButton.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, titleLeftInset);
173 | }
174 |
175 | - (void)clickLeftNavButton {
176 | if (self.isPushed) {
177 | [self.navigationController popViewControllerAnimated:YES];
178 | } else {
179 | if (self.navigationController != nil) {
180 | [self.navigationController dismissViewControllerAnimated:YES completion:nil];
181 | } else {
182 | [self dismissViewControllerAnimated:YES completion:nil];
183 | }
184 | }
185 | }
186 |
187 | - (void)removeNavLeftButtonDefaultEvent {
188 | [self.navLeftButton removeTarget:self
189 | action:@selector(clickLeftNavButton)
190 | forControlEvents:UIControlEventTouchUpInside];
191 | }
192 |
193 | - (void)reConfigNavMiddleButton {
194 | [self.navMiddleButton sizeToFit];
195 | CGFloat maxWidth = self.navigationBar.width - 2 * PADDING_30PX;
196 | if (self.navLeftButton != nil && self.navRightButton != nil) {
197 | maxWidth = self.navRightButton.x - self.navLeftButton.right;
198 | } else if (self.navLeftButton != nil) {
199 | maxWidth = self.navigationBar.width - 2 * self.navLeftButton.right;
200 | }
201 | if (self.navMiddleButton.width > maxWidth) {
202 | self.navMiddleButton.width = maxWidth;
203 | }
204 | self.navMiddleButton.center = CGPointMake(self.navigationBar.centerX ,
205 | self.navLeftButton.centerY + 20 * 0.5);
206 | }
207 |
208 | - (void)reConfigNavRightButton {
209 | if (self.navRightButton.currentBackgroundImage == nil) {
210 | [self.navRightButton sizeToFit];
211 | self.navRightButton.width = self.navRightButton.width + MARGIN_COMMON;
212 | self.navRightButton.height = 44;
213 | if (self.navRightButton.width < 40) {
214 | self.navRightButton.width = 40;
215 | }
216 |
217 | self.navRightButton.centerY = self.navLeftButton.centerY + (20 * 0.5);
218 | self.navRightButton.right = self.navigationBar.right;
219 | }
220 | else {
221 | self.navRightButton.centerY = self.navLeftButton.centerY + (20 * 0.5);
222 | self.navRightButton.right = self.navigationBar.right - MARGIN_COMMON;
223 | }
224 | }
225 |
226 | #pragma mark - 运行时添加实例变量
227 | - (void)setNavigationBar:(UIView *)navigationBar {
228 | objc_setAssociatedObject(self,
229 | NavigationBarKey,
230 | navigationBar,
231 | OBJC_ASSOCIATION_RETAIN_NONATOMIC);
232 | }
233 |
234 | - (UIView *)navigationBar {
235 | return objc_getAssociatedObject(self, NavigationBarKey);
236 | }
237 |
238 | - (void)setNavMiddleButton:(UIButton *)navMiddleButton {
239 | objc_setAssociatedObject(self,
240 | NavMiddleButtonKey,
241 | navMiddleButton,
242 | OBJC_ASSOCIATION_RETAIN_NONATOMIC);
243 | }
244 |
245 | - (UIButton *)navMiddleButton {
246 | return objc_getAssociatedObject(self, NavMiddleButtonKey);
247 | }
248 |
249 | - (void)setNavLeftButton:(UIButton *)navLeftButton {
250 | objc_setAssociatedObject(self,
251 | NavLeftButtonKey,
252 | navLeftButton,
253 | OBJC_ASSOCIATION_RETAIN_NONATOMIC);
254 | }
255 |
256 | - (UIButton *)navLeftButton {
257 | return objc_getAssociatedObject(self, NavLeftButtonKey);
258 | }
259 |
260 | - (void)setNavRightButton:(UIButton *)navRightButton {
261 | objc_setAssociatedObject(self,
262 | NavRightButtonKey,
263 | navRightButton,
264 | OBJC_ASSOCIATION_RETAIN_NONATOMIC);
265 | }
266 |
267 | - (UIButton *)navRightButton {
268 | return objc_getAssociatedObject(self, NavRightButtonKey);
269 | }
270 |
271 | - (void)setIsPushed:(BOOL)isPushed {
272 | NSNumber *isPushedNumber = [NSNumber numberWithBool:isPushed];
273 | objc_setAssociatedObject(self,
274 | IsPushedKey,
275 | isPushedNumber,
276 | OBJC_ASSOCIATION_ASSIGN);
277 | }
278 |
279 | - (BOOL)isPushed {
280 | NSNumber *isPushedInNumber = objc_getAssociatedObject(self, IsPushedKey);
281 | bool isPushed = [isPushedInNumber boolValue];
282 | return isPushed;
283 | }
284 |
285 | @end
286 |
--------------------------------------------------------------------------------
/Demo/FHHFPSIndicatorDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 25C90C9C1D227566002F1B5E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90C9B1D227566002F1B5E /* main.m */; };
11 | 25C90CA71D227566002F1B5E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 25C90CA61D227566002F1B5E /* Assets.xcassets */; };
12 | 25C90CAA1D227566002F1B5E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 25C90CA81D227566002F1B5E /* LaunchScreen.storyboard */; };
13 | 25C90CBC1D22762D002F1B5E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CB31D22762D002F1B5E /* AppDelegate.m */; };
14 | 25C90CBD1D22762D002F1B5E /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CB51D22762D002F1B5E /* HomeViewController.m */; };
15 | 25C90CBE1D22762D002F1B5E /* LastHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CB71D22762D002F1B5E /* LastHomeViewController.m */; };
16 | 25C90CBF1D22762D002F1B5E /* SubHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CB91D22762D002F1B5E /* SubHomeViewController.m */; };
17 | 25C90CC01D22762D002F1B5E /* WildernessViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CBB1D22762D002F1B5E /* WildernessViewController.m */; };
18 | 25C90CC61D227636002F1B5E /* UIView+FHH.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CC31D227636002F1B5E /* UIView+FHH.m */; };
19 | 25C90CC71D227636002F1B5E /* UIViewController+CustomNavigationBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CC51D227636002F1B5E /* UIViewController+CustomNavigationBar.m */; };
20 | 25C90CD41D237DF0002F1B5E /* FHHFPSIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CD11D237DF0002F1B5E /* FHHFPSIndicator.m */; };
21 | 25C90CD51D237DF0002F1B5E /* UIWindow+FHH.m in Sources */ = {isa = PBXBuildFile; fileRef = 25C90CD31D237DF0002F1B5E /* UIWindow+FHH.m */; };
22 | /* End PBXBuildFile section */
23 |
24 | /* Begin PBXFileReference section */
25 | 257574D81F5E9D440069680F /* Commom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Commom.h; sourceTree = ""; };
26 | 257574D91F5E9D510069680F /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; };
27 | 257574DB1F5E9EF50069680F /* CommonFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonFont.h; sourceTree = ""; };
28 | 257574DC1F5E9F120069680F /* CommonColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonColor.h; sourceTree = ""; };
29 | 257574DD1F5EA0010069680F /* CommonPadding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonPadding.h; sourceTree = ""; };
30 | 25C90C971D227566002F1B5E /* FHHFPSIndicatorDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FHHFPSIndicatorDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
31 | 25C90C9B1D227566002F1B5E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
32 | 25C90CA61D227566002F1B5E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
33 | 25C90CA91D227566002F1B5E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
34 | 25C90CAB1D227566002F1B5E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
35 | 25C90CB21D22762D002F1B5E /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
36 | 25C90CB31D22762D002F1B5E /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
37 | 25C90CB41D22762D002F1B5E /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; };
38 | 25C90CB51D22762D002F1B5E /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; };
39 | 25C90CB61D22762D002F1B5E /* LastHomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LastHomeViewController.h; sourceTree = ""; };
40 | 25C90CB71D22762D002F1B5E /* LastHomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LastHomeViewController.m; sourceTree = ""; };
41 | 25C90CB81D22762D002F1B5E /* SubHomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SubHomeViewController.h; sourceTree = ""; };
42 | 25C90CB91D22762D002F1B5E /* SubHomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubHomeViewController.m; sourceTree = ""; };
43 | 25C90CBA1D22762D002F1B5E /* WildernessViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WildernessViewController.h; sourceTree = ""; };
44 | 25C90CBB1D22762D002F1B5E /* WildernessViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WildernessViewController.m; sourceTree = ""; };
45 | 25C90CC21D227636002F1B5E /* UIView+FHH.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+FHH.h"; sourceTree = ""; };
46 | 25C90CC31D227636002F1B5E /* UIView+FHH.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+FHH.m"; sourceTree = ""; };
47 | 25C90CC41D227636002F1B5E /* UIViewController+CustomNavigationBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+CustomNavigationBar.h"; sourceTree = ""; };
48 | 25C90CC51D227636002F1B5E /* UIViewController+CustomNavigationBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+CustomNavigationBar.m"; sourceTree = ""; };
49 | 25C90CD01D237DF0002F1B5E /* FHHFPSIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FHHFPSIndicator.h; sourceTree = ""; };
50 | 25C90CD11D237DF0002F1B5E /* FHHFPSIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FHHFPSIndicator.m; sourceTree = ""; };
51 | 25C90CD21D237DF0002F1B5E /* UIWindow+FHH.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWindow+FHH.h"; sourceTree = ""; };
52 | 25C90CD31D237DF0002F1B5E /* UIWindow+FHH.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWindow+FHH.m"; sourceTree = ""; };
53 | /* End PBXFileReference section */
54 |
55 | /* Begin PBXFrameworksBuildPhase section */
56 | 25C90C941D227566002F1B5E /* Frameworks */ = {
57 | isa = PBXFrameworksBuildPhase;
58 | buildActionMask = 2147483647;
59 | files = (
60 | );
61 | runOnlyForDeploymentPostprocessing = 0;
62 | };
63 | /* End PBXFrameworksBuildPhase section */
64 |
65 | /* Begin PBXGroup section */
66 | 25C90C8E1D227566002F1B5E = {
67 | isa = PBXGroup;
68 | children = (
69 | 25C90C991D227566002F1B5E /* FHHFPSIndicatorDemo */,
70 | 25C90C981D227566002F1B5E /* Products */,
71 | );
72 | sourceTree = "";
73 | };
74 | 25C90C981D227566002F1B5E /* Products */ = {
75 | isa = PBXGroup;
76 | children = (
77 | 25C90C971D227566002F1B5E /* FHHFPSIndicatorDemo.app */,
78 | );
79 | name = Products;
80 | sourceTree = "";
81 | };
82 | 25C90C991D227566002F1B5E /* FHHFPSIndicatorDemo */ = {
83 | isa = PBXGroup;
84 | children = (
85 | 25C90CCF1D237DF0002F1B5E /* FHHFPSIndicator */,
86 | 25C90CC11D227636002F1B5E /* Utility */,
87 | 25C90CB11D22762D002F1B5E /* Classes */,
88 | 25C90CA61D227566002F1B5E /* Assets.xcassets */,
89 | 25C90CA81D227566002F1B5E /* LaunchScreen.storyboard */,
90 | 25C90CAB1D227566002F1B5E /* Info.plist */,
91 | 25C90C9A1D227566002F1B5E /* Supporting Files */,
92 | );
93 | path = FHHFPSIndicatorDemo;
94 | sourceTree = "";
95 | };
96 | 25C90C9A1D227566002F1B5E /* Supporting Files */ = {
97 | isa = PBXGroup;
98 | children = (
99 | 25C90C9B1D227566002F1B5E /* main.m */,
100 | 257574D81F5E9D440069680F /* Commom.h */,
101 | 257574D91F5E9D510069680F /* PrefixHeader.pch */,
102 | 257574DB1F5E9EF50069680F /* CommonFont.h */,
103 | 257574DC1F5E9F120069680F /* CommonColor.h */,
104 | 257574DD1F5EA0010069680F /* CommonPadding.h */,
105 | );
106 | name = "Supporting Files";
107 | sourceTree = "";
108 | };
109 | 25C90CB11D22762D002F1B5E /* Classes */ = {
110 | isa = PBXGroup;
111 | children = (
112 | 25C90CB21D22762D002F1B5E /* AppDelegate.h */,
113 | 25C90CB31D22762D002F1B5E /* AppDelegate.m */,
114 | 25C90CB41D22762D002F1B5E /* HomeViewController.h */,
115 | 25C90CB51D22762D002F1B5E /* HomeViewController.m */,
116 | 25C90CB81D22762D002F1B5E /* SubHomeViewController.h */,
117 | 25C90CB91D22762D002F1B5E /* SubHomeViewController.m */,
118 | 25C90CB61D22762D002F1B5E /* LastHomeViewController.h */,
119 | 25C90CB71D22762D002F1B5E /* LastHomeViewController.m */,
120 | 25C90CBA1D22762D002F1B5E /* WildernessViewController.h */,
121 | 25C90CBB1D22762D002F1B5E /* WildernessViewController.m */,
122 | );
123 | path = Classes;
124 | sourceTree = "";
125 | };
126 | 25C90CC11D227636002F1B5E /* Utility */ = {
127 | isa = PBXGroup;
128 | children = (
129 | 25C90CC21D227636002F1B5E /* UIView+FHH.h */,
130 | 25C90CC31D227636002F1B5E /* UIView+FHH.m */,
131 | 25C90CC41D227636002F1B5E /* UIViewController+CustomNavigationBar.h */,
132 | 25C90CC51D227636002F1B5E /* UIViewController+CustomNavigationBar.m */,
133 | );
134 | path = Utility;
135 | sourceTree = "";
136 | };
137 | 25C90CCF1D237DF0002F1B5E /* FHHFPSIndicator */ = {
138 | isa = PBXGroup;
139 | children = (
140 | 25C90CD01D237DF0002F1B5E /* FHHFPSIndicator.h */,
141 | 25C90CD11D237DF0002F1B5E /* FHHFPSIndicator.m */,
142 | 25C90CD21D237DF0002F1B5E /* UIWindow+FHH.h */,
143 | 25C90CD31D237DF0002F1B5E /* UIWindow+FHH.m */,
144 | );
145 | name = FHHFPSIndicator;
146 | path = ../../FHHFPSIndicator;
147 | sourceTree = "";
148 | };
149 | /* End PBXGroup section */
150 |
151 | /* Begin PBXNativeTarget section */
152 | 25C90C961D227566002F1B5E /* FHHFPSIndicatorDemo */ = {
153 | isa = PBXNativeTarget;
154 | buildConfigurationList = 25C90CAE1D227566002F1B5E /* Build configuration list for PBXNativeTarget "FHHFPSIndicatorDemo" */;
155 | buildPhases = (
156 | 25C90C931D227566002F1B5E /* Sources */,
157 | 25C90C941D227566002F1B5E /* Frameworks */,
158 | 25C90C951D227566002F1B5E /* Resources */,
159 | );
160 | buildRules = (
161 | );
162 | dependencies = (
163 | );
164 | name = FHHFPSIndicatorDemo;
165 | productName = FHHFPSIndicatorDemo;
166 | productReference = 25C90C971D227566002F1B5E /* FHHFPSIndicatorDemo.app */;
167 | productType = "com.apple.product-type.application";
168 | };
169 | /* End PBXNativeTarget section */
170 |
171 | /* Begin PBXProject section */
172 | 25C90C8F1D227566002F1B5E /* Project object */ = {
173 | isa = PBXProject;
174 | attributes = {
175 | LastUpgradeCheck = 0730;
176 | ORGANIZATIONNAME = 002;
177 | TargetAttributes = {
178 | 25C90C961D227566002F1B5E = {
179 | CreatedOnToolsVersion = 7.3;
180 | };
181 | };
182 | };
183 | buildConfigurationList = 25C90C921D227566002F1B5E /* Build configuration list for PBXProject "FHHFPSIndicatorDemo" */;
184 | compatibilityVersion = "Xcode 3.2";
185 | developmentRegion = English;
186 | hasScannedForEncodings = 0;
187 | knownRegions = (
188 | en,
189 | Base,
190 | );
191 | mainGroup = 25C90C8E1D227566002F1B5E;
192 | productRefGroup = 25C90C981D227566002F1B5E /* Products */;
193 | projectDirPath = "";
194 | projectRoot = "";
195 | targets = (
196 | 25C90C961D227566002F1B5E /* FHHFPSIndicatorDemo */,
197 | );
198 | };
199 | /* End PBXProject section */
200 |
201 | /* Begin PBXResourcesBuildPhase section */
202 | 25C90C951D227566002F1B5E /* Resources */ = {
203 | isa = PBXResourcesBuildPhase;
204 | buildActionMask = 2147483647;
205 | files = (
206 | 25C90CAA1D227566002F1B5E /* LaunchScreen.storyboard in Resources */,
207 | 25C90CA71D227566002F1B5E /* Assets.xcassets in Resources */,
208 | );
209 | runOnlyForDeploymentPostprocessing = 0;
210 | };
211 | /* End PBXResourcesBuildPhase section */
212 |
213 | /* Begin PBXSourcesBuildPhase section */
214 | 25C90C931D227566002F1B5E /* Sources */ = {
215 | isa = PBXSourcesBuildPhase;
216 | buildActionMask = 2147483647;
217 | files = (
218 | 25C90CC01D22762D002F1B5E /* WildernessViewController.m in Sources */,
219 | 25C90CC71D227636002F1B5E /* UIViewController+CustomNavigationBar.m in Sources */,
220 | 25C90CD51D237DF0002F1B5E /* UIWindow+FHH.m in Sources */,
221 | 25C90CBC1D22762D002F1B5E /* AppDelegate.m in Sources */,
222 | 25C90CC61D227636002F1B5E /* UIView+FHH.m in Sources */,
223 | 25C90CBF1D22762D002F1B5E /* SubHomeViewController.m in Sources */,
224 | 25C90C9C1D227566002F1B5E /* main.m in Sources */,
225 | 25C90CBD1D22762D002F1B5E /* HomeViewController.m in Sources */,
226 | 25C90CD41D237DF0002F1B5E /* FHHFPSIndicator.m in Sources */,
227 | 25C90CBE1D22762D002F1B5E /* LastHomeViewController.m in Sources */,
228 | );
229 | runOnlyForDeploymentPostprocessing = 0;
230 | };
231 | /* End PBXSourcesBuildPhase section */
232 |
233 | /* Begin PBXVariantGroup section */
234 | 25C90CA81D227566002F1B5E /* LaunchScreen.storyboard */ = {
235 | isa = PBXVariantGroup;
236 | children = (
237 | 25C90CA91D227566002F1B5E /* Base */,
238 | );
239 | name = LaunchScreen.storyboard;
240 | sourceTree = "";
241 | };
242 | /* End PBXVariantGroup section */
243 |
244 | /* Begin XCBuildConfiguration section */
245 | 25C90CAC1D227566002F1B5E /* Debug */ = {
246 | isa = XCBuildConfiguration;
247 | buildSettings = {
248 | ALWAYS_SEARCH_USER_PATHS = NO;
249 | CLANG_ANALYZER_NONNULL = YES;
250 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
251 | CLANG_CXX_LIBRARY = "libc++";
252 | CLANG_ENABLE_MODULES = YES;
253 | CLANG_ENABLE_OBJC_ARC = YES;
254 | CLANG_WARN_BOOL_CONVERSION = YES;
255 | CLANG_WARN_CONSTANT_CONVERSION = YES;
256 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
257 | CLANG_WARN_EMPTY_BODY = YES;
258 | CLANG_WARN_ENUM_CONVERSION = YES;
259 | CLANG_WARN_INT_CONVERSION = YES;
260 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
261 | CLANG_WARN_UNREACHABLE_CODE = YES;
262 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
263 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
264 | COPY_PHASE_STRIP = NO;
265 | DEBUG_INFORMATION_FORMAT = dwarf;
266 | ENABLE_STRICT_OBJC_MSGSEND = YES;
267 | ENABLE_TESTABILITY = YES;
268 | GCC_C_LANGUAGE_STANDARD = gnu99;
269 | GCC_DYNAMIC_NO_PIC = NO;
270 | GCC_NO_COMMON_BLOCKS = YES;
271 | GCC_OPTIMIZATION_LEVEL = 0;
272 | GCC_PREPROCESSOR_DEFINITIONS = (
273 | "DEBUG=1",
274 | "$(inherited)",
275 | );
276 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
277 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
278 | GCC_WARN_UNDECLARED_SELECTOR = YES;
279 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
280 | GCC_WARN_UNUSED_FUNCTION = YES;
281 | GCC_WARN_UNUSED_VARIABLE = YES;
282 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
283 | MTL_ENABLE_DEBUG_INFO = YES;
284 | ONLY_ACTIVE_ARCH = YES;
285 | SDKROOT = iphoneos;
286 | TARGETED_DEVICE_FAMILY = "1,2";
287 | };
288 | name = Debug;
289 | };
290 | 25C90CAD1D227566002F1B5E /* Release */ = {
291 | isa = XCBuildConfiguration;
292 | buildSettings = {
293 | ALWAYS_SEARCH_USER_PATHS = NO;
294 | CLANG_ANALYZER_NONNULL = YES;
295 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
296 | CLANG_CXX_LIBRARY = "libc++";
297 | CLANG_ENABLE_MODULES = YES;
298 | CLANG_ENABLE_OBJC_ARC = YES;
299 | CLANG_WARN_BOOL_CONVERSION = YES;
300 | CLANG_WARN_CONSTANT_CONVERSION = YES;
301 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
302 | CLANG_WARN_EMPTY_BODY = YES;
303 | CLANG_WARN_ENUM_CONVERSION = YES;
304 | CLANG_WARN_INT_CONVERSION = YES;
305 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
306 | CLANG_WARN_UNREACHABLE_CODE = YES;
307 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
308 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
309 | COPY_PHASE_STRIP = NO;
310 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
311 | ENABLE_NS_ASSERTIONS = NO;
312 | ENABLE_STRICT_OBJC_MSGSEND = YES;
313 | GCC_C_LANGUAGE_STANDARD = gnu99;
314 | GCC_NO_COMMON_BLOCKS = YES;
315 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
316 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
317 | GCC_WARN_UNDECLARED_SELECTOR = YES;
318 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
319 | GCC_WARN_UNUSED_FUNCTION = YES;
320 | GCC_WARN_UNUSED_VARIABLE = YES;
321 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
322 | MTL_ENABLE_DEBUG_INFO = NO;
323 | SDKROOT = iphoneos;
324 | TARGETED_DEVICE_FAMILY = "1,2";
325 | VALIDATE_PRODUCT = YES;
326 | };
327 | name = Release;
328 | };
329 | 25C90CAF1D227566002F1B5E /* Debug */ = {
330 | isa = XCBuildConfiguration;
331 | buildSettings = {
332 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
333 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
334 | GCC_PREFIX_HEADER = FHHFPSIndicatorDemo/PrefixHeader.pch;
335 | INFOPLIST_FILE = FHHFPSIndicatorDemo/Info.plist;
336 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
337 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
338 | PRODUCT_BUNDLE_IDENTIFIER = com.fhhe.FHHFPSIndicatorDemo;
339 | PRODUCT_NAME = "$(TARGET_NAME)";
340 | PROVISIONING_PROFILE = "21ab5b6e-3985-4566-9933-d7c4ba336123";
341 | };
342 | name = Debug;
343 | };
344 | 25C90CB01D227566002F1B5E /* Release */ = {
345 | isa = XCBuildConfiguration;
346 | buildSettings = {
347 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
348 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
349 | GCC_PREFIX_HEADER = FHHFPSIndicatorDemo/PrefixHeader.pch;
350 | INFOPLIST_FILE = FHHFPSIndicatorDemo/Info.plist;
351 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
352 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
353 | PRODUCT_BUNDLE_IDENTIFIER = com.fhhe.FHHFPSIndicatorDemo;
354 | PRODUCT_NAME = "$(TARGET_NAME)";
355 | PROVISIONING_PROFILE = "21ab5b6e-3985-4566-9933-d7c4ba336123";
356 | };
357 | name = Release;
358 | };
359 | /* End XCBuildConfiguration section */
360 |
361 | /* Begin XCConfigurationList section */
362 | 25C90C921D227566002F1B5E /* Build configuration list for PBXProject "FHHFPSIndicatorDemo" */ = {
363 | isa = XCConfigurationList;
364 | buildConfigurations = (
365 | 25C90CAC1D227566002F1B5E /* Debug */,
366 | 25C90CAD1D227566002F1B5E /* Release */,
367 | );
368 | defaultConfigurationIsVisible = 0;
369 | defaultConfigurationName = Release;
370 | };
371 | 25C90CAE1D227566002F1B5E /* Build configuration list for PBXNativeTarget "FHHFPSIndicatorDemo" */ = {
372 | isa = XCConfigurationList;
373 | buildConfigurations = (
374 | 25C90CAF1D227566002F1B5E /* Debug */,
375 | 25C90CB01D227566002F1B5E /* Release */,
376 | );
377 | defaultConfigurationIsVisible = 0;
378 | defaultConfigurationName = Release;
379 | };
380 | /* End XCConfigurationList section */
381 | };
382 | rootObject = 25C90C8F1D227566002F1B5E /* Project object */;
383 | }
384 |
--------------------------------------------------------------------------------