CATransformLayer

好尷尬,按照套路,我點進了CATransformLayer.h,但是空空如也,什么也沒有。那么CATransfromLayer的作用是啥呢?只能通過擼代碼來體會了。

//先上效果圖吧


對比效果吧

部分代碼

繪制立方體
    //面1
    transfrom = CATransform3DMakeTranslation(0, 0, sub_width/2);
    [cube addSublayer:[self layerWithTransform:transfrom]];
    
    //面2
    transfrom = CATransform3DMakeTranslation(0, 0, -sub_width/2);
    [cube addSublayer:[self layerWithTransform:transfrom]];
    
    //面3
    transfrom = CATransform3DMakeTranslation(sub_width/2, 0, 0);
    transfrom = CATransform3DRotate(transfrom, M_PI_2, 0, 1, 0);
    [cube addSublayer:[self layerWithTransform:transfrom]];
    
    //面4
    transfrom = CATransform3DMakeTranslation(-sub_width/2, 0, 0);
    transfrom = CATransform3DRotate(transfrom, -M_PI_2, 0, 1, 0);
    [cube addSublayer:[self layerWithTransform:transfrom]];
    
    
    //面5
    transfrom = CATransform3DMakeTranslation(0, sub_width/2, 0);
    transfrom = CATransform3DRotate(transfrom, M_PI_2, 1, 0, 0);
    [cube addSublayer:[self layerWithTransform:transfrom]];

    //面6
    transfrom = CATransform3DMakeTranslation(0, -sub_width/2, 0);
    transfrom = CATransform3DRotate(transfrom, -M_PI_2, 1, 0, 0);
    [cube addSublayer:[self layerWithTransform:transfrom]];
動畫
    static float degree = 0.f;
    
    CGFloat duration = 1.f;
    CGFloat singleDuration = 1 / (duration * 60.0);
    CGFloat singleDegree = 45/(duration * 60.0);
    
    
    CATransform3D fromValue = CATransform3DIdentity;
    fromValue.m34 = -1/500;
    fromValue = CATransform3DRotate(fromValue, DEGREE(degree), 0, 1, 0);
    
    CATransform3D toValue = CATransform3DIdentity;
    toValue.m34 = -1/500;
    toValue = CATransform3DRotate(toValue, DEGREE(degree += singleDegree), 0, 1, 0);
    
    //使用transform無法實現(xiàn)旋轉(zhuǎn)2*M_PI,此時可以使用虛擬屬性@"transform.rotation.y",可以使用相對值旋轉(zhuǎn)byValue
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
    animation.duration = singleDuration;
    animation.fromValue = [NSValue valueWithCATransform3D:fromValue];
    animation.toValue = [NSValue valueWithCATransform3D:toValue];
    animation.repeatCount = HUGE_VALL;
    animation.removedOnCompletion = NO;
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    [layer addAnimation:animation forKey:@"transform"];

結(jié)論:CATransformLayer可以為他的子圖層,統(tǒng)一提供景深效果。(如有錯誤,請指正。如需源碼,請點贊留言)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CATransformLayer不同于普通的CALayer,因為它不能顯示她自己的內(nèi)容,只有當(dāng)存在了一個能作用域子...
    HeartPower閱讀 600評論 0 3
  • 學(xué)習(xí)文章 詳解CATransformLayer 效果 利用M34做景深 利用CATransformLayer做3D...
    劉大帥閱讀 2,640評論 2 8
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,258評論 5 13
  • 感謝天杞園特膳,讓我甩開肉肉、走出自卑! 大家好,我是娜娜。發(fā)這篇文章是想跟大家分享一下我的減肥經(jīng)歷。 其實我也不...
    落辰閣閱讀 269評論 0 0

友情鏈接更多精彩內(nèi)容