模仿淘寶選擇商品詳情時(shí), 折疊后面的視圖

用OC寫了一個(gè)小Demo, 模仿了淘寶和京東APP在選擇商品詳情時(shí), 折疊后面的視圖的效果.

<br />

<br />

效果圖:

<br />


Mou icon
Mou icon

<br />
<br />

關(guān)鍵思路:

  • 背景視圖有一個(gè)距離屏幕遠(yuǎn)近變換的效果, 所以這里必須要用到Transform.m34這個(gè)屬性.
  • 背景視圖旋轉(zhuǎn)時(shí), 分別繞頂部和底部旋轉(zhuǎn), 所以需要修改圖層的anchorPoint屬性.
  • 點(diǎn)擊圖片時(shí), 由于子控件超出父控件, 所以子控件并不能響應(yīng)點(diǎn)擊事件, 這時(shí)響應(yīng)點(diǎn)擊事件的是背景視圖, 這里需要使用hitTest:方法來改變事件的響應(yīng)者.
    <br />
    <br />

核心代碼:

 //修改錨點(diǎn)
    self.behindV.layer.anchorPoint = CGPointMake(0.5, 0);
    self.behindV.layer.position = CGPointMake([UIScreen mainScreen].bounds.size.width*0.5, 0);


    CATransform3D transform = CATransform3DIdentity;
        
    //眼睛離屏幕的距離.(近大遠(yuǎn)小.)
    transform.m34 = 1 / 1000.0;
        
    self.behindV.layer.transform = CATransform3DRotate(transform, 7*M_PI/180.0, 1, 0, 0);
//如果當(dāng)前的點(diǎn)在imageV上, 就讓imageV處理事件.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    CGPoint imageP = [self convertPoint:point toView:self.iconV];
    
    if ([self.iconV pointInside:imageP withEvent:event]) return self.iconV;
    
    else return [super hitTest:point withEvent:event];
}

<br />

代碼鏈接: https://github.com/EvanFisher/FoldBackgroundView
如果你喜歡這個(gè)效果, 請(qǐng)給我一顆星星哦...

<br />

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

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

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