• <图形图像,动画,多媒体> 读书笔记 --- 力学行为特性


    UIKit力学行为包括了:重力(UIGravityBehavior),碰撞(UICollisionBehavior),吸附(UIAttachmentBehavior),推(UIPushBehavior),甩(UISnapBehavior)和行为限制(UIDynamicItemBehavior).


    - (void)viewDidAppear:(BOOL)animated {
        
        [super viewDidAppear:animated];
        
        _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
        //重力行为
        _gravity = [[UIGravityBehavior alloc] initWithItems:@[_box]];
        [_animator addBehavior:_gravity];
        //碰撞行为
        _collision = [[UICollisionBehavior alloc]
                      initWithItems:@[_box]];
        
        [_collision addBoundaryWithIdentifier:@"barrier" fromPoint:_barrier.frame.origin
                                      toPoint:CGPointMake(_barrier.frame.origin.x + _barrier.frame.size.width, _barrier.frame.origin.y)];
        
        _collision.translatesReferenceBoundsIntoBoundary = YES;
        _collision.collisionDelegate = self;
        
        [_animator addBehavior:_collision];
        UIDynamicItemBehavior* itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:@[_box]];
        itemBehaviour.elasticity = 0.5;
        [_animator addBehavior:itemBehaviour];
        
    }
    
    
    
    - (void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p {
        if (!_firstContact)
        {
            _firstContact = YES;
            //设置吸附行为
            self.attach = [[UIAttachmentBehavior alloc] initWithItem:_attachmentPoint attachedToItem:_box];
            [self.animator addBehavior:self.attach];
            
            //设置推行为
            UIPushBehavior* push = [[UIPushBehavior alloc] initWithItems:@[_box] mode:UIPushBehaviorModeInstantaneous];
            //        [push setAngle:-M_PI/4 magnitude:5.0f]; //右上角45度
            CGVector pushDirection = {0.5, -0.5}; //setAngle: magnitude:替代方法
            [push setPushDirection:pushDirection];
            [push setMagnitude:5.0f];
            [_animator addBehavior:push];
        }
        
    }
    
    
    


    另一个我个人认为比較实用,就是甩行为

    - (void)viewDidAppear:(BOOL)animated {
        
        [super viewDidAppear:animated];
        
        _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    
    }
    
    - (IBAction)handleSnapGesture:(UITapGestureRecognizer*)gesture
    {
        CGPoint point = [gesture locationInView:self.view];
        
        // 移除甩行为
        [_animator removeBehavior:_snap];
        
        _snap = [[UISnapBehavior alloc] initWithItem:_box snapToPoint:point];
        [self.animator addBehavior:_snap];
    }
    
    

    另一个就是类似桌面随手腕角度改变视图位移的方法

    //设置山在X轴的偏移范围-50.0~50.0
        UIInterpolatingMotionEffect *mountainEffectX;
        mountainEffectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
                                                                  type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
        mountainEffectX.maximumRelativeValue = @50.0;
    	mountainEffectX.minimumRelativeValue = @-50.0;
        [self.mountain addMotionEffect:mountainEffectX];
        
        //设置树在X轴的偏移范围-100.0~100.0
        UIInterpolatingMotionEffect *treeEffectX;
        treeEffectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
                                                                          type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
        treeEffectX.maximumRelativeValue = @100.0;
    	treeEffectX.minimumRelativeValue = @-100.0;
        [self.tree addMotionEffect:treeEffectX];
    
    

  • 相关阅读:
    Reverse Linked List(算法)
    Move Zeroes (算法)
    Majority Element (算法)
    apk资源文件解析异常导致无法发编译的几种情况及解决方案
    使用update包更新系统文件的过程
    听鬼哥说故事之安卓学习手册_研究过程记录(未完成...)
    ios arm64
    ios,新浪微博
    ios ,微信分享
    ios,qq分享
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4505492.html
Copyright © 2020-2023  润新知