KZPlayground 0.3.3

KZPlayground 0.3.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新版本2015年5月

Krzysztof ZablockiKrzysztof Zabłocki维护。



 
依赖项
dyci~> 0.1.5.6
RSSwizzle~> 0.1.0
NHBalancedFlowLayout~> 0.2
 

Swift Playgrounds... 但针对Objective-C,并具有一些出色的功能。

观看演示

更深入的视频概述

Playgrounds是Swift中非常酷的功能之一。它们允许您快速测试代码片段并实时查看结果,而无需经过传统的编辑-编译-运行-调试周期。

"但 playgrounds 在 Objective-C 中肯定是不可能的" 你会说吗?实际上,它们可能比 Swift 的更好。

Objective-C Playgrounds

功能

  • 比 Swift playgrounds 快(很多)
  • 额外的调整控件
    • 图像
  • 自动动画值
  • 同步 DSL 的
  • 按钮
  • 独立于 IDE,一旦运行,您可以从 vim 等修改代码。
  • 完整的 iOS 模拟器和访问所有 iOS 功能,因此您可以原型化生产就绪的代码。
  • 快速原型化的优雅 DSL
  • CocoaPods 支持,因此您可以将它添加到现有项目中以进行实验
  • 开源的,任何人都可以贡献以使它们更好!

这只是个开始。

技术细节

首先,让我们建立命名

  • 时间轴是您拥有快照和控制的地方。
  • 工作表是您可以添加视图/控件并与它们交互的地方。您可以使用所有通常与 iOS 一起使用的功能,如 UIGestureRecognizers 等。
  • 滴答计数器 - 代码更改加载的次数,乘以编译 + 加载您项目所需的时间,您可以看到您节省了多少时间。

DSL 的 - 美观且快速的原型化方法。

时间轴快照

KZPShow(obj)

  • CALayer
  • UIView
  • UIBezierPath
  • CGPathRef
  • CGImageRef
  • UIImage
  • NSString,带有或没有格式
  • id

实现自定义类快照

您可以使用自定义调试图像

- (UIImage*)kzp_debugImage;

如果已经实现了 - (id)debugQuickLookObject 方法,且返回值是 KZPShow 支持的类型之一,您就无需做任何事情。

控件

  • 按钮
KZPAction(@"Press me", ^{
// Magic code
})
  • 图片

从库中选取图片

KZPAdjustImage(myImage);
KZPWhenChanged(myImage, ^(UIImage *img) {
  imageView.image = img;
});
KZPAdjustValue(scale, 0.5f, 1.0f) //- for floats
KZPAdjustValue(position, 0, 100) //- for integers

您还可以设置默认值

KZPAdjustValue(position, 0, 100).defaultValue(50)
  • 应用于块的回调 KZPAdjust 也可用。

动画

  • 块动画回调,每帧屏幕刷新时将执行该代码(display link)。对于动画多个值非常有用。
KZPAnimate(CGFloat from, CGFloat to, void (^block)(CGFloat));
KZPAnimate(void (^block)());
  • 自动动画值,定义新变量并自动对其动画。AR -> AutoReverse
KZPAnimateValue(rotation, 0, 360)
KZPAnimateValueAR(scale, 0, 1)

协调代码执行

仅当值设置后执行代码

KZPWhenSet(myImage, ^(UIImage *img) {
    //! magic
});

值变化时执行代码

KZPWhenChanged(myImage, ^(UIImage *img) {
    //! magic
});

存储变量

临时 - 随代码更改而清除

对于 KZPlayground 类(您可以正常使用它们创建的用于游乐园的普通类中的实例变量/属性),你应该存储 游乐园特定变量,这些变量需要在游乐园方法之间引用,例如。您想使用 UIPanGestureRecognizer 在内部平移的视图,例如 transientObjects 字典中的。

self.transientObjects[@"pannableView"] = view;

持久 - 不会随重新编译而清除

实现设置方法并使用常规实例变量来存储您不希望在代码更改时更改的数据。例如,如果您需要执行一些昂贵的操作。

设置过程中记录的快照将保留在时间轴上。

- (void)setup
{
    self.data = [self fetchBigDataSet];
}

安装和设置

KZPlayground 以 CocoaPod 分发:pod 'KZPlayground' 您可以将它添加到现有的项目中,或者克隆此存储库并对其进行测试。

请记住,不要在生成环境的构建中添加游乐园(使用新的 CocoaPod 配置范围非常简单)。

一旦安装了 CocoaPod,您需要创建您的游乐园,这个过程很简单

  1. 继承 KZPPlayground
  2. 实现运行方法
  3. 遵守 KZPActivePlayground 协议
    您可以在一个项目中拥有多个游乐园,但其中只有一个应该被标记为 KZPActivePlayground。它将被自动加载。
  4. 显示 [KZPPlaygroundViewController playgroundViewController]

要应用您更改,您有两种方法

  1. 在 Xcode/Appcode 中,当您正在修改代码时,您可以使用 cmd/ctrl + x(通过 dyci 插件实现)。
  2. (我更喜欢)自动在文件保存时(不依赖 IDE)使用终端中的 kicker 钩子在终端中:(请注意,您需要安装 kicker 钩子,请参见以下说明)
kicker -sql 0.05 FOLDER_WITH_SOURCE_FILES

对于示例项目,您将需要在项目根目录中调用 kicking(包含 .kick 文件,您也将需要。)

kicker -sql 0.05 Example

这将响应在 Example 目录中的所有 .m 文件的变化并重新加载您的游乐园。

(可选)使 Kicker 在您运行项目时自动启动

  1. 将 .kick 文件复制到您的项目目录中。
  2. 在目标 "构建阶段" 选项卡下添加一个新的 "运行脚本" 并提供以下内容
PID_PATH=/tmp/${PROJECT_NAME}_kicker.pid
if [ -e $PID_PATH ]
then
  kill $(cat $PID_PATH)
  rm $PID_PATH
fi
kicker -sql 0.05 . > /dev/null 2>&1 & echo $! > $PID_PATH

注意:您完成项目后需要手动终止kicker进程,因为停止运行项目后它将不会被终止。

仅一次

KZPlayground由Dyci代码注入工具驱动,您只需要在您的机器上安装一次(您需要在新版Xcode中重新安装))

git clone https://github.com/DyCI/dyci-main.git
cd dyci-main/Install/
./install.sh

为了使用kicker gem,您需要按照以下方式安装

(sudo) gem install kicker

路线图 & 贡献

  • Xib重新编译
  • Storyboard重新编译
  • 集成图形显示。
  • 可调整大小的时序/工作表分隔器。
  • 数组 && 字典的更佳可视化。

欢迎提交pull请求。

版本变更记录

0.3.2

  • 隐藏时序的能力

0.3.1

  • XCAsset图像选择。
  • 持久选择图像。

0.3.0

  • 图像选择。
  • 同步。
  • 更改观察。
  • 可本地化字符串注入。

0.2.5

  • 持久设置功能。
  • 改进快照详细信息。

0.2.0

  • 现在可以更改项目中的所有文件以触发演练加载。
  • 更好的kicker设置。
  • 瞬时对象。

许可协议

KZPlayground在修改后的MIT许可下可用。有关更多信息,请参阅LICENSE文件。

作者

Krzysztof Zablocki,[email protected]

在twitter上关注我。

查看我的博客GitHub个人资料以了解更多有趣的内容。

归属

SceneKit示例代码取自David Ronnqvist即将出版的SceneKit书籍,推荐阅读。