Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ibireme/YYAsyncLayer
iOS utility classes for asynchronous rendering and display.
https://github.com/ibireme/YYAsyncLayer
Last synced: 8 days ago
JSON representation
iOS utility classes for asynchronous rendering and display.
- Host: GitHub
- URL: https://github.com/ibireme/YYAsyncLayer
- Owner: ibireme
- License: mit
- Created: 2015-11-09T10:02:28.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2020-03-13T12:45:32.000Z (almost 5 years ago)
- Last Synced: 2024-11-22T21:09:50.820Z (20 days ago)
- Language: Objective-C
- Size: 38.1 KB
- Stars: 681
- Watchers: 17
- Forks: 119
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - YYAsyncLayer - iOS utility classes for asynchronous rendering and display. (Graphics / Getting Started)
- awesome-ios-star - YYAsyncLayer - iOS utility classes for asynchronous rendering and display. (Graphics / Getting Started)
- awesome - YYAsyncLayer - iOS 异步绘制与显示的工具。 (iOS / YYKit)
- awesome - YYAsyncLayer - iOS 异步绘制与显示的工具。 (iOS / YYKit)
README
YYAsyncLayer
==============[![License MIT](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://raw.githubusercontent.com/ibireme/YYAsyncLayer/master/LICENSE)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![CocoaPods](http://img.shields.io/cocoapods/v/YYAsyncLayer.svg?style=flat)](http://cocoapods.org/pods/YYAsyncLayer)
[![CocoaPods](http://img.shields.io/cocoapods/p/YYAsyncLayer.svg?style=flat)](http://cocoadocs.org/docsets/YYAsyncLayer)
[![Support](https://img.shields.io/badge/support-iOS%206%2B%20-blue.svg?style=flat)](https://www.apple.com/nl/ios/)
[![Build Status](https://travis-ci.org/ibireme/YYAsyncLayer.svg?branch=master)](https://travis-ci.org/ibireme/YYAsyncLayer)iOS utility classes for asynchronous rendering and display.
(It was used by [YYText](https://github.com/ibireme/YYText))Simple Usage
==============```objc
@interface YYLabel : UIView
@property NSString *text;
@property UIFont *font;
@end@implementation YYLabel
- (void)setText:(NSString *)text {
_text = text.copy;
[[YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)] commit];
}- (void)setFont:(UIFont *)font {
_font = font;
[[YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)] commit];
}- (void)layoutSubviews {
[super layoutSubviews];
[[YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)] commit];
}- (void)contentsNeedUpdated {
// do update
[self.layer setNeedsDisplay];
}#pragma mark - YYAsyncLayer
+ (Class)layerClass {
return YYAsyncLayer.class;
}- (YYAsyncLayerDisplayTask *)newAsyncDisplayTask {
// capture current state to display task
NSString *text = _text;
UIFont *font = _font;
YYAsyncLayerDisplayTask *task = [YYAsyncLayerDisplayTask new];
task.willDisplay = ^(CALayer *layer) {
//...
};
task.display = ^(CGContextRef context, CGSize size, BOOL(^isCancelled)(void)) {
if (isCancelled()) return;
NSArray *lines = CreateCTLines(text, font, size.width);
if (isCancelled()) return;
for (int i = 0; i < lines.count; i++) {
CTLineRef line = line[i];
CGContextSetTextPosition(context, 0, i * font.pointSize * 1.5);
CTLineDraw(line, context);
if (isCancelled()) return;
}
};
task.didDisplay = ^(CALayer *layer, BOOL finished) {
if (finished) {
// finished
} else {
// cancelled
}
};
return task;
}
@end
```Installation
==============### CocoaPods
1. Add `pod 'YYAsyncLayer'` to your Podfile.
2. Run `pod install` or `pod update`.
3. Import \.### Carthage
1. Add `github "ibireme/YYAsyncLayer"` to your Cartfile.
2. Run `carthage update --platform ios` and add the framework to your project.
3. Import \.### Manually
1. Download all the files in the YYAsyncLayer subdirectory.
2. Add the source files to your Xcode project.
3. Import `YYAsyncLayer.h`.Documentation
==============
Full API documentation is available on [CocoaDocs](http://cocoadocs.org/docsets/YYAsyncLayer/).
You can also install documentation locally using [appledoc](https://github.com/tomaz/appledoc).Requirements
==============
This library requires `iOS 6.0+` and `Xcode 8.0+`.License
==============
YYAsyncLayer is provided under the MIT license. See LICENSE file for details.
---
中文介绍
==============
iOS 异步绘制与显示的工具类。
(该工具是从 [YYText](https://github.com/ibireme/YYText) 提取出来的独立组件)简单用法
==============```objc
@interface YYLabel : UIView
@property NSString *text;
@property UIFont *font;
@end@implementation YYLabel
- (void)setText:(NSString *)text {
_text = text.copy;
[[YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)] commit];
}- (void)setFont:(UIFont *)font {
_font = font;
[[YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)] commit];
}- (void)layoutSubviews {
[super layoutSubviews];
[[YYTransaction transactionWithTarget:self selector:@selector(contentsNeedUpdated)] commit];
}- (void)contentsNeedUpdated {
// do update
[self.layer setNeedsDisplay];
}#pragma mark - YYAsyncLayer
+ (Class)layerClass {
return YYAsyncLayer.class;
}- (YYAsyncLayerDisplayTask *)newAsyncDisplayTask {
// capture current state to display task
NSString *text = _text;
UIFont *font = _font;
YYAsyncLayerDisplayTask *task = [YYAsyncLayerDisplayTask new];
task.willDisplay = ^(CALayer *layer) {
//...
};
task.display = ^(CGContextRef context, CGSize size, BOOL(^isCancelled)(void)) {
if (isCancelled()) return;
NSArray *lines = CreateCTLines(text, font, size.width);
if (isCancelled()) return;
for (int i = 0; i < lines.count; i++) {
CTLineRef line = line[i];
CGContextSetTextPosition(context, 0, i * font.pointSize * 1.5);
CTLineDraw(line, context);
if (isCancelled()) return;
}
};
task.didDisplay = ^(CALayer *layer, BOOL finished) {
if (finished) {
// finished
} else {
// cancelled
}
};
return task;
}
@end
```安装
==============### CocoaPods
1. 在 Podfile 中添加 `pod 'YYAsyncLayer'`。
2. 执行 `pod install` 或 `pod update`。
3. 导入 \。### Carthage
1. 在 Cartfile 中添加 `github "ibireme/YYAsyncLayer"`。
2. 执行 `carthage update --platform ios` 并将生成的 framework 添加到你的工程。
3. 导入 \。### 手动安装
1. 下载 YYAsyncLayer 文件夹内的所有内容。
2. 将 YYAsyncLayer 内的源文件添加(拖放)到你的工程。
3. 导入 `YYAsyncLayer.h`。文档
==============
你可以在 [CocoaDocs](http://cocoadocs.org/docsets/YYAsyncLayer/) 查看在线 API 文档,也可以用 [appledoc](https://github.com/tomaz/appledoc) 本地生成文档。系统要求
==============
该项目最低支持 `iOS 6.0` 和 `Xcode 8.0`。许可证
==============
YYAsyncLayer 使用 MIT 许可证,详情见 LICENSE 文件。相关文章
==============
[iOS 保持界面流畅的技巧
](https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/)