CoconutKit 是一个为 iOS 设计的 生产力框架,充满爱意,专注于易用性。它提供了一套方便的、Cocoa 风格的工具箱,帮助您高效地编写强大和完善的原生应用程序。
构建状态 | 技术 | 最新版本 | 集成 | 文档 | 许可证 |
---|---|---|---|---|---|
标志由 Kilian Amendola (@kilianamendola) 设计
与大多数专注于特定任务(如网络或图像处理)的库不同,CoconutKit 解决了 开发者一般的生产力问题。作为 iOS 开发者,您在您所工作的每个项目中都会面临同样的问题
与这些问题的相关代码大部分都在视图控制器中编写,增加了脱节且乏味的代码到视图控制器的实现中。
CoconutKit 通过以下方式提供了一套工具,以**解决肥视图控制器类的难题**:
与像 MVVM 这样的模式不同,CoconutKit 不需要您对代码或工作方式的任何重大更改。您只需要您熟悉的老牌语言和模式。
以下是对 CoconutKit 中提供的一些工具和组件的简要介绍。更多信息请参阅 wiki。
CoconutKit 通过提供类似 UIKit 的容器以组合和堆叠视图控制器,使将您的应用程序划分为独立、可重用的视图控制器变得简单。与常规 UIKit 容器相结合,几个内置的过渡动画以及编写自定义过渡的可能性,您只需按几个键即可重新排列屏幕和更改它们的表现方式。包含故事板支持。
你是否怀念编写 Mac 应用时那些可用的 绑定?现在只需将视图与键路径关联起来,如果需要,设置格式化器,这样就可以了。CoconutKit 会处理其余的事。
所有这些魔法都可以在不需要连接点的情况下实现,而且大多数时候甚至不需要编写一行代码。大多数 UIKit 控件都可以使用绑定,你还可以为自己的控件添加绑定支持。
对于包含大量文本字段的屏幕,CoconutKit 还提供了可靠的自动键盘管理,这样键盘就不会妨碍操作。
也和通常与动画相关的乱糟糟的代码说再见。CoconutKit 允许你以声明式的方式创建动画。这些动画可以轻松存储以供以后使用,反向执行,重复播放,暂停,继续,以及取消。最好的是,它们可以涉及任意数量的视图,还可以与 Core Animation 无缝配合!
例如,这样定义一个脉冲动画:
// Increase size while decreasing opacity
HLSLayerAnimation *pulseLayerAnimation1 = [HLSLayerAnimation animation];
[pulseLayerAnimation1 scaleWithXFactor:2.f yFactor:2.f];
[pulseLayerAnimation1 addToOpacity:-1.f];
HLSLayerAnimationStep *pulseLayerAnimationStep1 = [HLSLayerAnimationStep animationStep];
pulseLayerAnimationStep1.duration = 0.8;
pulseLayerAnimationStep1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[pulseLayerAnimationStep1 addLayerAnimation:pulseLayerAnimation1 forView:view];
// Wait
HLSLayerAnimationStep *pulseLayerAnimationStep2 = [HLSLayerAnimationStep animationStep];
pulseLayerAnimationStep2.duration = 0.5;
// Instantly bring back the view to its initial state
HLSLayerAnimation *pulseLayerAnimation3 = [HLSLayerAnimation animation];
[pulseLayerAnimation3 scaleWithXFactor:1.f / 2.f yFactor:1.f / 2.f];
[pulseLayerAnimation3 addToOpacity:1.f];
HLSLayerAnimationStep *pulseLayerAnimationStep3 = [HLSLayerAnimationStep animationStep];
pulseLayerAnimationStep3.duration = 0.;
[pulseLayerAnimationStep3 addLayerAnimation:pulseLayerAnimation3 forView:view];
// Create and repeat the animation forever
HLSAnimation *pulseAnimation = [HLSAnimation animationWithAnimationSteps:@[pulseLayerAnimationStep1, pulseLayerAnimationStep2, pulseLayerAnimationStep3]];
[pulseAnimation playWithRepeatCount:NSUIntegerMax animated:YES];
通常对应用程序界面进行本地化是非常繁琐的,并且需要大量的样板代码。使用 CoconutKit,可以itty在不使用连接点的情况下,直接在 Interface Builder 中进行标签和按钮的本地化,只需使用一个前置缀加上你的本地化键。有几种前置缀可以自动将本地化字符串转换为大写、小写或者首字母大写的形式。
您也可以通过单个方法调用更改应用程序的语言。
为了进一步分解你的视图层级,CoconutKit 提供了从 nib 文件轻松实例化视图的功能。这样,你可以分别设计视图,并在 Interface Builder 中直接组合它们。
也提供了简单的表格视图单元格实例化。
当需要在你的应用程序内显示某些网站时,网络浏览器是可用到的。
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://about.me/defagos"]];
HLSWebViewController *webViewController = [[HLSWebViewController alloc] initWithRequest:request];
UINavigationController *webNavigationController = [[UINavigationController alloc] initWithRootViewController:webViewController];
[self presentViewController:webNavigationController animated:YES completion:nil];
想要将图像或背景作为动画图库显示吗?CoconutKit 的幻灯片让您轻松实现。您可以选择多种过渡动画,从简单的淡入淡出到 Ken Burns 随机缩放和移动。
厌倦了分段控件吗?那么就使用 CoconutKit 的光标吧,它可以按需定制。
通过单个方法调用同步滚动视图,即可在你的应用程序中添加视差滚动。
[treesScrollView synchronizeWithScrollViews:@[skyScrollView, mountainsScrollView, grassScrollView] bounces:NO];
为了避免与 Core Data 项目相关的通常混乱,您可以通过单一模型管理器实例化创建所有必要的上下文和存储,并将它们推入以使其成为当前的。
HLSModelManager *modelManager = [HLSModelManager SQLiteManagerWithModelFileName:@"Company"
inBundle:nil
configuration:nil
storeDirectory:HLSApplicationDocumentDirectoryPath()
fileManager:nil
options:HLSModelManagerLightweightMigrationOptions];
[HLSModelManager pushModelManager:modelManager];
然后,您不需要再与 Core Data 中的上下文打交道。操作在顶层模型管理器上应用。
Employee *employee = [Employee insert];
employee.firstName = @"John";
employee.lastName = @"Doe";
NSError *error = nil;
if (! [HLSModelManager saveCurrentModelContext:&error]) {
[HLSModelManager rollbackCurrentModelContext];
// Deal with the error
}
结合mogenerator生成模型文件和CoconutKit绑定数据显示及编辑,创建由Core Data驱动的应用轻而易举。
CoconutKit需要最新的Xcode和iOS SDK版本,目前为
支持部署过去两个主要的iOS版本,目前为
支持所有架构
CoconutKit可以从Objective-C或Swift文件中引用。它不包含任何私有API方法调用,因此符合App Store规范。
CoconutKit可以通过CocoaPods、Carthage或作为静态编译的框架添加到项目中。
从命令行检出CoconutKit源代码
$ git clone --recursive https://github.com/defagos/CoconutKit.git
$ cd CoconutKit
打开CoconutKit.xcworkspace
并运行CoconutKit-staticframework
方案。
这将在Binaries
目录中生成一个.staticframework
包。将其添加到您的项目中,并将相应的CoconutKit-release.xcconfig
或CoconutKit-debug.xcconfig
与每个目标配置关联
由于.xcconfig
文件是构建文件,您应该将其从目标的Copy Bundle Resources构建阶段中删除
这两个.xcconfig
文件已经包含链接到CoconutKit
框架发布版本和调试程序的标志。因此,您必须删除在目标的Link Binary With Libraries构建阶段中自动添加的CoconutKit.framework
条目
现在,您的项目应该可以成功编译
如果您的项目已经需要一个配置文件,您需要创建一个伞形.xcconfig
文件,其中包含这两个文件,因为Xcode只允许每个目标/配置有一个
#include "/path/to/your/config.xcconfig"
#include "/path/to/CoconutKit-(debug|release).xcconfig"
然后使用这个配置文件。
提供全局的CoconutKit.h
头文件。当然,如果您偏好,也可以单独导入公共头文件。
使用如下方式导入全局头文件
#import <CoconutKit/CoconutKit.h>
您可以类似地导入单个文件,例如
#import <CoconutKit/HLSStackController.h>
如果您使用静态框架、Carthage或带use_frameworks!
指令的CocoaPods,则可以在需要的地方更简单地导入CoconutKit模块
@import CoconutKit;
对于使用CocoaPods进行安装的情况,您还可以使用#import "CoconutKit.h"
或#import "HLSStackController.h"
,尽管我现在不再推荐这种语法。
如果您使用CocoaPods安装了CoconutKit,但没有携带use_frameworks!
指令,请从桥接头文件中导入全局头文件
#import <CoconutKit.h/CoconutKit.h>
如果您使用带use_frameworks!
指令的静态框架、Carthage或CocoaPods,可以在需要的地方导入CoconutKit模块
import CoconutKit
CoconutKit工作空间包含一个用于开发示例项目。只需运行CoconutKit-dev
方案即可。
请访问wiki获取文档、教程和为贡献者提供的指南。如果您想了解特定组件的更多信息,请查看相应的头文件文档。
CoconutKit在MIT许可下可用。有关更多信息,请参阅LICENSE文件。