CoconutKit 3.2.3

CoconutKit 3.2.3

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2016 年 11 月

Samuel Défago 维护。



CoconutKit 是一个为 iOS 设计的 生产力框架,充满爱意,专注于易用性。它提供了一套方便的、Cocoa 风格的工具箱,帮助您高效地编写强大和完善的原生应用程序。

构建状态 技术 最新版本 集成 文档 许可证

标志由 Kilian Amendola (@kilianamendola) 设计

Donate to author

关于

与大多数专注于特定任务(如网络或图像处理)的库不同,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 中进行标签和按钮的本地化,只需使用一个前置缀加上你的本地化键。有几种前置缀可以自动将本地化字符串转换为大写、小写或者首字母大写的形式。

您也可以通过单个方法调用更改应用程序的语言。

从 nib 文件轻松实例化视图

为了进一步分解你的视图层级,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 管理

为了避免与 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版本,目前为

  • Xcode 7.0
  • iOS 9.0 SDK

支持部署过去两个主要的iOS版本,目前为

  • iOS 8.x
  • iOS 9.x

支持所有架构

  • i386和x86_64
  • armv7, armv7s和arm64

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.xcconfigCoconutKit-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头文件。当然,如果您偏好,也可以单独导入公共头文件。

从Objective-C源文件中引用

使用如下方式导入全局头文件

#import <CoconutKit/CoconutKit.h>

您可以类似地导入单个文件,例如

#import <CoconutKit/HLSStackController.h>

如果您使用静态框架、Carthage或带use_frameworks!指令的CocoaPods,则可以在需要的地方更简单地导入CoconutKit模块

@import CoconutKit;

备注

对于使用CocoaPods进行安装的情况,您还可以使用#import "CoconutKit.h"#import "HLSStackController.h",尽管我现在不再推荐这种语法。

从Swift源文件中引用

如果您使用CocoaPods安装了CoconutKit,但没有携带use_frameworks!指令,请从桥接头文件中导入全局头文件

#import <CoconutKit.h/CoconutKit.h>

如果您使用带use_frameworks!指令的静态框架、Carthage或CocoaPods,可以在需要的地方导入CoconutKit模块

import CoconutKit

示例项目

CoconutKit工作空间包含一个用于开发示例项目。只需运行CoconutKit-dev方案即可。

文档

请访问wiki获取文档、教程和为贡献者提供的指南。如果您想了解特定组件的更多信息,请查看相应的头文件文档。

联系方式

Samuel Défago (@defagos)

许可

CoconutKit在MIT许可下可用。有关更多信息,请参阅LICENSE文件。