AsyncDisplayKit2.0中新功能 Automatic Subnode Management

Automatic Subnode Management(ASM)是AsyncDisplayKit2.0中的新功能,當(dāng)使用 Layout Transition API進(jìn)行布局時(shí)可以撵溃,可以省略掉addSubnode:removeFromSupernode彼妻,node是否添加或移除由layoutSpecThatFits:中的布局決定, 當(dāng)需要調(diào)整布局時(shí)可以調(diào)用setNeedsLayout再次調(diào)用layoutSpecThatFits:

AsyncDisplayKit2.0以前的方式

- (instancetype)initWithModelCollectProductLis:(TTCollectProductModel *)product
{
    if (!(self = [super init])) {
        return nil;
    }

    self.backgroundColor = [UIColor whiteColor];
    self.imageViewNode = [[ASNetworkImageNode alloc] init];
    self.imageViewNode.URL = [GlobalFunc urlWithStr:product.ImgUrl];
    self.imageViewNode.defaultImage = [UIImage imageNamed:@"defaultImg"];
    self.imageViewNode.placeholderFadeDuration = 0.3;
    self.imageViewNode.layerBacked = YES;
    
    self.priceTextNode = [[ASTextNode alloc] init];
    self.priceTextNode.maximumNumberOfLines = 1;
    self.priceTextNode.layerBacked = YES;
    
    NSString *price = [NSString stringWithFormat:@"¥%@",[GlobalFunc checkPrice:product.ProductVipPrice.doubleValue]];
    self.priceTextNode.attributedText = [NSAttributedString attributedStringPriceText:price];
    
    self.oldPriceTextNode = [[ASTextNode alloc] init];
    self.oldPriceTextNode.maximumNumberOfLines = 1;
    self.oldPriceTextNode.layerBacked = YES;
    NSString *oldPrice = [NSString stringWithFormat:@"¥%.0f",product.ProductSalePrice.doubleValue];
    self.oldPriceTextNode.attributedText = [NSAttributedString attributedStringOldPriceText:oldPrice];
 
    self.contentTextNode = [[ASTextNode alloc] init];
    self.contentTextNode.maximumNumberOfLines = 2;
    self.contentTextNode.truncationMode = NSLineBreakByTruncatingTail;
    self.contentTextNode.layerBacked = YES;
    self.contentTextNode.attributedText = [NSAttributedString attributedStringProductNameText:product.Productname];
 
    [self.view addSubnode:self.imageViewNode];
    [self.view addSubnode:self.priceTextNode];
    [self.view addSubnode:self.oldPriceTextNode];
    [self.view addSubnode:self.contentTextNode];
    
    return self;
}

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
{
    ASRatioLayoutSpec *imageRatioSpec = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:1 child:self.imageViewNode];
    
    ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init];
    spacer.flexGrow = YES;
    
    ASStackLayoutSpec *priceStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal spacing:0 justifyContent:ASStackLayoutJustifyContentSpaceBetween alignItems:ASStackLayoutAlignItemsCenter children:@[self.priceTextNode, spacer, self.oldPriceTextNode]];
    
    ASStackLayoutSpec *contentStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical spacing:10 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsStretch children:@[priceStackSpec, self.contentTextNode]];
    
    ASInsetLayoutSpec *contentinsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0, 10, 10, 10) child:contentStackSpec];
    
    ASStackLayoutSpec *cellStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical spacing:0 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsStretch children:@[imageRatioSpec, contentinsetSpec]];
    return cellStackSpec;
}

AsyncDisplayKit2.0方式

- (instancetype)initWithModelCollectProductLis:(TTCollectProductModel *)product
{
    if (!(self = [super init])) {
        return nil;
    }
    self.automaticallyManagesSubnodes = YES;

    self.backgroundColor = [UIColor whiteColor];
    self.imageViewNode = [[ASNetworkImageNode alloc] init];
    self.imageViewNode.URL = [GlobalFunc urlWithStr:product.ImgUrl];
    self.imageViewNode.defaultImage = [UIImage imageNamed:@"defaultImg"];
    self.imageViewNode.placeholderFadeDuration = 0.3;
    self.imageViewNode.layerBacked = YES;
    
    self.priceTextNode = [[ASTextNode alloc] init];
    self.priceTextNode.maximumNumberOfLines = 1;
    self.priceTextNode.layerBacked = YES;
    
    NSString *price = [NSString stringWithFormat:@"¥%@",[GlobalFunc checkPrice:product.ProductVipPrice.doubleValue]];
    self.priceTextNode.attributedText = [NSAttributedString attributedStringPriceText:price];
    
    self.oldPriceTextNode = [[ASTextNode alloc] init];
    self.oldPriceTextNode.maximumNumberOfLines = 1;
    self.oldPriceTextNode.layerBacked = YES;
    NSString *oldPrice = [NSString stringWithFormat:@"¥%.0f",product.ProductSalePrice.doubleValue];
    self.oldPriceTextNode.attributedText = [NSAttributedString attributedStringOldPriceText:oldPrice];
    
    self.contentTextNode = [[ASTextNode alloc] init];
    self.contentTextNode.maximumNumberOfLines = 2;
    self.contentTextNode.truncationMode = NSLineBreakByTruncatingTail;
    self.contentTextNode.layerBacked = YES;
    self.contentTextNode.attributedText = [NSAttributedString attributedStringProductNameText:product.Productname];
       
    return self;
}

- (ASLayoutSpec *)layoutSpecThatFits:(ASSizeRange)constrainedSize
{
    ASRatioLayoutSpec *imageRatioSpec = [ASRatioLayoutSpec ratioLayoutSpecWithRatio:1 child:self.imageViewNode];
    
    ASLayoutSpec *spacer = [[ASLayoutSpec alloc] init];
    spacer.style.flexGrow = YES;
    
    ASStackLayoutSpec *priceStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionHorizontal spacing:0 justifyContent:ASStackLayoutJustifyContentSpaceBetween alignItems:ASStackLayoutAlignItemsCenter children:@[self.priceTextNode, spacer, self.oldPriceTextNode]];
    
    ASStackLayoutSpec *contentStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical spacing:10 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsStretch children:@[priceStackSpec, self.contentTextNode]];
    
    ASInsetLayoutSpec *contentinsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0, 10, 10, 10) child:contentStackSpec];
    
    ASStackLayoutSpec *cellStackSpec = [ASStackLayoutSpec stackLayoutSpecWithDirection:ASStackLayoutDirectionVertical spacing:0 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsStretch children:@[imageRatioSpec, contentinsetSpec]];
    return cellStackSpec;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甚负,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悬荣,更是在濱河造成了極大的恐慌骑冗,老刑警劉巖入撒,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隆豹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡茅逮,警方通過(guò)查閱死者的電腦和手機(jī)璃赡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)判哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人碉考,你說(shuō)我怎么就攤上這事塌计。” “怎么了豆励?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵夺荒,是天一觀的道長(zhǎng)瞒渠。 經(jīng)常有香客問(wèn)我良蒸,道長(zhǎng),這世上最難降的妖魔是什么伍玖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任嫩痰,我火速辦了婚禮,結(jié)果婚禮上窍箍,老公的妹妹穿的比我還像新娘串纺。我一直安慰自己,他們只是感情好椰棘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布纺棺。 她就那樣靜靜地躺著,像睡著了一般邪狞。 火紅的嫁衣襯著肌膚如雪祷蝌。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天帆卓,我揣著相機(jī)與錄音巨朦,去河邊找鬼。 笑死剑令,一個(gè)胖子當(dāng)著我的面吹牛糊啡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吁津,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棚蓄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了碍脏?” 一聲冷哼從身側(cè)響起梭依,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎潮酒,沒(méi)想到半個(gè)月后睛挚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡急黎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年扎狱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侧到。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淤击,死狀恐怖匠抗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情污抬,我是刑警寧澤汞贸,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站印机,受9級(jí)特大地震影響矢腻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜射赛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一多柑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楣责,春花似錦竣灌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沮趣,卻和暖如春屯烦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兔毒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工漫贞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人育叁。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓迅脐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親豪嗽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谴蔑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容