zoukankan      html  css  js  c++  java
  • <图形图像,动画,多媒体> 读书笔记 --- 力学行为特性

    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];
    
    

  • 相关阅读:
    [ 原创 ] Java基础9--final throw throws finally的区别
    [ 原创 ] Java基础8--什么叫做重载
    [ 原创 ] Java基础7--Java反射机制主要提供了以下哪些功能?
    [ 转载 ] 什么是正则表达式的贪婪与非贪婪匹配
    [ 原创 ] Java基础6--构造函数和抽象类的性质
    [ 转载 ] Java中常用的设计模式
    [ 转载 ] 超详细:常用的设计模式汇总
    [ 转载 ] Java开发中的23种设计模式详解(转)
    [ 原创 ] Java基础5--abstract class和interface的区别
    MetaWeblog API
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4505492.html
Copyright © 2011-2022 走看看