4:抽屜菜單

DIFF

構建彈性動畫貝塞爾曲線的控制點(3點貝塞爾曲線)的偏移值

image-20210611102355413.png

MenuView動畫

由兩部分動畫構成

  • 第一部分,是菜單從屏幕外平移到屏幕內,時間大概3s
[UIView animateWithDuration:0.3 animations:^{
            self.frame = self.bounds;
        }];
  • 第二部分,是啟動刷幀定時器 CADisplayLink ,通過drawrect 貝塞爾曲線實現動畫
CADisplayLink {
   CALayer *sideHelperPresentationLayer   =  (CALayer *)[helperSideView.layer presentationLayer];
    CALayer *centerHelperPresentationLayer =  (CALayer *)[helperCenterView.layer presentationLayer];
    CGRect centerRect = centerHelperPresentationLayer.frame;
    CGRect sideRect = sideHelperPresentationLayer.frame; 
    diff = sideRect.origin.x - centerRect.origin.x;
    
    [self setNeedsDisplay];
}

drawRect {
  UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(0, 0)];
    [path addLineToPoint:CGPointMake(self.frame.size.width - menuBlankWidth, 0)];
    [path addQuadCurveToPoint:CGPointMake(self.frame.size.width - menuBlankWidth, self.frame.size.height) controlPoint:CGPointMake(keyWindow.frame.size.width/2+diff, keyWindow.frame.size.height/2)];
    [path addLineToPoint:CGPointMake(0, self.frame.size.height)];
    [path closePath];
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextAddPath(context, path.CGPath);
    [[UIColor orangeColor] set];
    CGContextStrokePath(context);
}

// 收起動畫同理

MenuView上子視圖階梯彈出動畫

        UIView *menuButton = self.subviews[i];
        menuButton.transform = CGAffineTransformMakeTranslation(-90, 0);
// i*(0.3/self.subviews.count 這樣可以達到從上到下逐個彈出的特效
        [UIView animateWithDuration:0.7 delay:i*(0.3/self.subviews.count) usingSpringWithDamping:0.6f initialSpringVelocity:0.0f options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction animations:^{
            menuButton.transform =  CGAffineTransformIdentity;
        } completion:NULL];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,250評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,455評論 25 708
  • 年輕人也很需要儀式感,如果喜歡,我希望你不要隔著屏幕跟我表白。 1. 橙子以前暗戀一個男生,每天來到教室,第一時間...
    詩水年華閱讀 750評論 2 0
  • 你需要多受一點苦,然后才會真正謙恭; 不然,你那自以為是的聰明和藐視一切的優越感遲早要毀了你。
    愛吃柚子的小斯閱讀 330評論 0 0
  • ,@,,@,,@,,,,,@,@@,,@,,,,
    real拼閱讀 152評論 0 0