feixiangli / FlyCreateUIforAsyncDisplayKit

这大概是现在比较全面的ASDKdemo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FlyCreateUIforAsyncDisplayKit

这大概是现在比较全面的ASDKdemo FlyCreateUIforAsyncDisplayKit

AsyncDisplayKit的使用

ASDK框架是Facebook的UI框架,能够提高UI的流畅性并缩短响应时间。

ASDK基本单元是node(节点)

node是UIView之上的抽象层,因此同时也是CALayer的抽象层。和只能被用在主线程的视图不同,

nodes是线程安全的:你能并行的实例化并设置整个node层级,并且在后台线程里运行。

它可以让你的界面流畅运行和相应,无论多么复杂的界面也可以保证60FPS

AsyncDisplayKit让你将图像解码、调整文字大小并渲染,以及其他高耗时的UI操作移出主线程

*Fly在研究ASDK后,对其进行了基础控件的封装,写了ASTableview和AScollectionview的demo。 *即使从没接触过ASDK,你也可以快速上手。

安装:

*必须使用cocopods

ASDK github(https://github.com/facebook/AsyncDisplayKit) pod 'AsyncDisplayKit’

然后拖拽 FlyCreateUIforASDK文件夹进你的工程 加入创建控件头文件 FlyCreate.h 和ASDK的头文件 <AsyncDisplayKit/AsyncDisplayKit.h>

//例如创建一个ASDisplayNode的node,这相当于UIKIt的一个View

FlyView * flyview = [[FlyView alloc] initWithFrame:CGRectMake(100, 480, 80, 80) Color:[UIColor purpleColor] cornerRadius:40 addView:self.view ];

例如 : 这是一个ASImageNode的封装

*把线程安全的操作放入工作线程,对view的操作必须在main线程 // // FlyImageView.m // FlyASDK // // Created by 李飞翔 on 16/1/31. // Copyright © 2016年 Fly. All rights reserved. //

#import "FlyImageView.h"

@implementation FlyImageView

-(instancetype)initWithFrame:(CGRect)frame backgroundColor:(UIColor*)color imageName:(NSString*)imageName cornerRadius:(int)cornerRadius Target:(id)Target action:(SEL)Action addView:(UIView*)View { if (self=[super init]) {

    dispatch_async(dispatch_queue_create("FlyImageView", DISPATCH_QUEUE_CONCURRENT), ^{
        
        self.backgroundColor=color;
        self.frame=frame;
        self.userInteractionEnabled=YES;
        self.image=[UIImage imageNamed:imageName];
        [self addTarget:Target action:Action forControlEvents:ASControlNodeEventTouchUpInside];
        
        dispatch_async(dispatch_get_main_queue(),^{
            
            self.layer.masksToBounds=YES;        //这两局layer操作也是异步 ASDK内部对node的layer做了异步处理
            self.layer.cornerRadius=cornerRadius;
            [View addSubview:self.view];
            
        });
    });
    
}

return self;

} @end

//控件的添加

你可以采用[View addSubview:node.view]的方法把一个node添加到一个view上, 也可以 用[nodeTwo addSubnode:node]的方法 在一个node上添加子node, 需要注意的是采用 [View addSubview:node.view] 必须在main线程, 而 addSubnode: 不需要你进行线程判断,ASDK内部已经做了处理,

如果你想详细了解ASDK http://asyncdisplaykit.org/guide/ (详细讲解了ASDK的原理和使用方法) http://asyncdisplaykit.org/appledoc/ (API文档)

这大概是现在比较全面的ASDKdemo 欢迎加我的QQ与我讨论(925360157)

2016.2.4—— For Fly 李飞翔

About

这大概是现在比较全面的ASDKdemo


Languages

Language:Objective-C 100.0%