用途:
從一個點移動到另外一個點;
相關屬性:
mode : UIPushBehaviorModeContinuous //推移模式
angle : setAngle //推移角度
magnitude : setMagnitude //速度 每1個magnigude將會引起100/平方秒的加速度
圖片說明:
p1 : squareView的中心點 p2 : 單擊的點
促使squareView朝著p2移動,因為加了UICollisionBehavior,所以移動時又不會超過邊界

代碼:
//
// YFPushBehaviorViewController.m
// BigShow1949
//
// Created by apple on 16/8/25.
// Copyright © 2016年 BigShowCompany. All rights reserved.
//
#import "YFPushBehaviorViewController.h"
@interface YFPushBehaviorViewController ()
@property(nonatomic,strong)UIDynamicAnimator *animator;
@property (nonatomic, strong) UIView *squareView;
@property (nonatomic, strong) UIPushBehavior *pushBehavior;
@end
@implementation YFPushBehaviorViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
// 創建一個正方形
self.squareView =[[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 80.0f, 80.0f)];
self.squareView.backgroundColor = [UIColor greenColor];
self.squareView.center = self.view.center;
[self.view addSubview:self.squareView];
// 視圖單機手勢
[self createGestureRecognizer];
[self createAnimatorAndBehaviors];
}
- (void) createGestureRecognizer{
UITapGestureRecognizer *tapGestureRecognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.view addGestureRecognizer:tapGestureRecognizer];
}
- (void) handleTap:(UITapGestureRecognizer *)paramTap{
CGPoint tapPoint = [paramTap locationInView:self.view]; //p2
CGPoint squareViewCenterPoint = self.squareView.center; //p1
CGFloat deltaX = tapPoint.x - squareViewCenterPoint.x;
CGFloat deltaY = tapPoint.y - squareViewCenterPoint.y;
CGFloat angle = atan2(deltaY, deltaX);
[self.pushBehavior setAngle:angle]; //推移的角度
//勾股
CGFloat distanceBetweenPoints =
sqrt(pow(tapPoint.x - squareViewCenterPoint.x, 2.0) +
pow(tapPoint.y - squareViewCenterPoint.y, 2.0));
//double pow(double x, double y);計算以x為底數的y次冪
//double sqrt (double);開平方
//推力的大小(移動速度)
[self.pushBehavior setMagnitude:distanceBetweenPoints / 50.0f];
//每1個magnigude將會引起100/平方秒的加速度,這裡分母越大,速度越小
}
- (void) createSmallSquareView{
self.squareView =[[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 80.0f, 80.0f)];
self.squareView.backgroundColor = [UIColor greenColor];
self.squareView.center = self.view.center;
[self.view addSubview:self.squareView];
}
- (void) createAnimatorAndBehaviors{
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
/* Create collision detection */
UICollisionBehavior *collision = [[UICollisionBehavior alloc]
initWithItems:@[self.squareView]];
collision.translatesReferenceBoundsIntoBoundary = YES;
self.pushBehavior = [[UIPushBehavior alloc]
initWithItems:@[self.squareView]
mode:UIPushBehaviorModeContinuous];
[self.animator addBehavior:collision];
[self.animator addBehavior:self.pushBehavior];
}
@end