使用FBTweak

使用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(120, 30)}];
    tweaksButton.center    = self.view.center;
    tweaksButton.layer.borderWidth = 0.5f;
    tweaksButton.titleLabel.font   = [UIFont fontWithName:@"HelveticaNeue-UltraLight"
                                                     size:20.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(30, 30, 280, 100)];
    label.font      = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:30.f];
    label.textColor = [UIColor redColor];
    [self.view addSubview:label];

    
    // 初始化一个测试用view
    UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(20, 400, 280, 20)];
    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(20, 500, 280, 20);
        }];
    }
    else
    {
        [UIView animateWithDuration:duration animations:^{
            tap.view.frame = CGRectMake(20, 400, 280, 20);
        }];
    }
    
    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

几个值得注意的地方:

原文地址:https://www.cnblogs.com/YouXianMing/p/3830105.html