使用FBTweak

https://github.com/facebook/Tweaks

FBTweak是Facebook的一款开源库,用于微调数据而无需我们重复编译跑真机用的,它支持4种类型的cell

  • _FBTweakTableViewCellModeBoolean,
  • _FBTweakTableViewCellModeInteger,
  • _FBTweakTableViewCellModeReal,
  • _FBTweakTableViewCellModeString,

用起来还不错,但在实际开发中,我们应该用得很少吧!权当学习开源库使用给大家介绍介绍.

示例源码地址:

http://pan.baidu.com/s/1i3KHQ1B

本人测试时的效果图:

源码:

AppDelegate.m

//
// AppDelegate.m
// Tweak
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "FBTweak.h"
#import "FBTweakShakeWindow.h"
#import "FBTweakInline.h"
#import "FBTweakViewController.h" #import "AppDelegate.h"
#import "RootViewController.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[FBTweakShakeWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.rootViewController = [RootViewController new]; self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
} @end

RootViewController.m

//
// RootViewController.m
// Tweak
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "FBTweak.h"
#import "FBTweakShakeWindow.h"
#import "FBTweakInline.h"
#import "FBTweakViewController.h"
#import "RootViewController.h" // 全局显示的方式
FBTweakAction(@"全局操作", @"显示一个AlertView", @"显示这个AlertView", ^{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"YouXianMing"
message:@"全局测试1"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"完成", nil];
[alert show];
}); @interface RootViewController ()<FBTweakObserver, FBTweakViewControllerDelegate> { FBTweak *_flipTweak; } @end @implementation RootViewController - (void)addTestButton
{
// 添加一个按钮用来进行微调
UIButton *tweaksButton = [[UIButton alloc] initWithFrame:(CGRect){CGPointZero, CGSizeMake(, )}];
tweaksButton.center = self.view.center;
tweaksButton.layer.borderWidth = 0.5f;
tweaksButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-UltraLight"
size:.f];
[tweaksButton setTitle:@"YouXianMing"
forState:UIControlStateNormal];
[tweaksButton setTitleColor:[UIColor blackColor]
forState:UIControlStateNormal];
[tweaksButton addTarget:self
action:@selector(buttonTapped)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:tweaksButton];
} - (void)viewDidLoad
{
[super viewDidLoad]; // 添加微调按钮
[self addTestButton]; // 初始化一个测试用label
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
label.font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:.f];
label.textColor = [UIColor redColor];
[self.view addSubview:label]; // 初始化一个测试用view
UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
showView.backgroundColor = [UIColor redColor];
[self.view addSubview:showView];
UITapGestureRecognizer *tap = \
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(tapGesture:)];
[showView addGestureRecognizer:tap]; // 注册一个微调值的方式(后面通过方法FBTweakValue来将值取出来)
FBTweak *animationDurationTweak = \
FBTweakInline(@"UI控件", @"某个View", @"动画时间", 1.0, 0.1, 7.0);
animationDurationTweak.stepValue = [NSNumber numberWithFloat:0.1f]; // 绑定属性的方式
FBTweakBind(label, text, @"UI控件", @"某个Label", @"字符串", @"YouXianMing");
FBTweakBind(label, alpha, @"UI控件", @"某个Label", @"透明度", 1.0, 0.0, 1.0); // 走代理的方式
_flipTweak = FBTweakInline(@"视图视图控制器", @"效果", @"翻转", NO);
[_flipTweak addObserver:self];
} - (void)buttonTapped
{
FBTweakViewController *viewController = \
[[FBTweakViewController alloc] initWithStore:[FBTweakStore sharedInstance]];
viewController.tweaksDelegate = self; [self presentViewController:viewController
animated:YES
completion:NULL];
} - (void)tapGesture:(UITapGestureRecognizer *)tap
{
// 从注册的值中取出来
NSTimeInterval duration = \
FBTweakValue(@"UI控件", @"某个View", @"动画时间", 1.0, 0.1, 7.0); static BOOL flag = YES;
if (flag)
{
[UIView animateWithDuration:duration animations:^{
tap.view.frame = CGRectMake(, , , );
}];
}
else
{
[UIView animateWithDuration:duration animations:^{
tap.view.frame = CGRectMake(, , , );
}];
} flag = !flag;
} #pragma mark - FBTweak的两个代理方法
- (void)tweakDidChange:(FBTweak *)tweak
{
if (tweak == _flipTweak)
{
self.view.layer.sublayerTransform = \
CATransform3DMakeScale(1.0, [_flipTweak.currentValue boolValue] ? -1.0 : 1.0, 1.0);
}
} - (void)tweakViewControllerPressedDone:(FBTweakViewController *)tweakViewController
{
// 推出控制器
[tweakViewController dismissViewControllerAnimated:YES
completion:nil];
} @end

几个值得注意的地方:

使用FBTweak的更多相关文章

  1. iOS.FBTweak

    FBTweak的源码分析 1. FBTweak提供了以下功能 A): 可以动态的修改某个变量的值,这些变量的类型包括: ... B): 可以以plist的形式将Tweak以key-value的形式进行 ...

随机推荐

  1. CPU结构与指令执行过程简介

    CPU(Central Processing Unit)是计算机中进行算术和逻辑计算处理指令的主要部件. CPU结构 CPU由通用寄存器组,运算器,控制器和数据通路等部件组成. 寄存器包括 数据寄存器 ...

  2. ZBar之ZBarReaderViewController

    // // ViewController.m // ZBarReaderViewController // // Created by City--Online on 15/6/9. // Copyr ...

  3. [转]Configure Network Drive Visible for SQL Server During Backup and Restore Using SSMS

    本文转自:https://mytechmantra.com/LearnSQLServer/Configure-Network-Drive-Visible-for-SQL-Server-During-B ...

  4. springcloud-断路器hystrix

    Netflix的创造了一个调用的库 Hystrix 实现了断路器.在微服务架构中,通常有多层服务调用. 底层服务出现故障可能导致用户级联故障.当调用特定服务达到一定阈值时(Hystrix中的默认值为5 ...

  5. SQL Server如何存储特殊字符、上标、下标

    测试验证特殊符号能否存入数据库中: 其中,像一些普通单位符号比如“ ° ′"﹩ $ ﹠ & £¥ ‰ % ℃ ¤ ¢℉”可以正常录入没有问题,但是万分号“‱”之上就不可以了,录入后显 ...

  6. C#基础笔记(第十四天)

    1.MD5加密 用户在数据库存密码需要进行再加密,这样一个过程叫MD5加密只要涉及到存用户的密码一定要用MD5加密MD5密码一般都是16进制的把一个密码转换成16进制的过程就叫MD5加密把字符串加密成 ...

  7. Spring Boot学习笔记(八)使用jar和war方式打包并在外部Tomcat中部署运行

    使用war包的方式发布到外部Tomcat中去 首先修改pom.xml中的配置,使打包方式设置为war包的形式 然后 maven update project 更新下项目 Application入口文件 ...

  8. 哈夫曼编码(Huffman coding)的那些事,(编码技术介绍和程序实现)

    前言 哈夫曼编码(Huffman coding)是一种可变长的前缀码.哈夫曼编码使用的算法是David A. Huffman还是在MIT的学生时提出的,并且在1952年发表了名为<A Metho ...

  9. 在pom.xml中添加Spring依赖

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  10. vue.js 开发环境配置

    1. node.js环境(npm包管理器) 下载: https://nodejs.org/en/download/current/ 下载解压版的方便 添加path环境后运行 npm包管理器,是集成在n ...