标签: uicollisionbehavior

UICollisionBehavior - 视图通过边界

作为实现UICollisionBehaviour的一部分,我为屏幕边缘设置了边界.然后我添加了一些视图,最后将一个UIPanGestureRecognizer附加到其中一个.

现在我可以使用我的可拖动视图来推动较小的视图.

锤时间!

问题: 如果我将较小的视角转向并将其推向屏幕边缘,它最终将滑过边界并被困在另一侧.我用来击打和推动其他视图的"锤子视图"也会陷入界限.即它在屏幕的一侧被卡住/不可拖动.

我做了一个非常小的例子,看看当我的视图很少而且没有相互冲突的行为时我是否可以重现它,视图仍然可以通过边界.无论是UIDynamics都无法处理,或者(更有可能)我以某种方式配置错误.

下面的小例子有奇怪的行为:

class ViewController: UIViewController {

var animator: UIDynamicAnimator?
var collisionBehaviour: UICollisionBehavior?
var panBehaviour: UIAttachmentBehavior?

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    setup()
}

func setup() {
    //setup collisionBehaviour and animator
    collisionBehaviour = UICollisionBehavior()
    collisionBehaviour!.collisionMode = UICollisionBehaviorMode.allZeros
    animator = UIDynamicAnimator(referenceView: view)

    //add boundaries
    collisionBehaviour!.addBoundaryWithIdentifier("verticalMin", fromPoint: CGPointMake(0, 0), toPoint: CGPointMake(0, CGRectGetHeight(view.frame)))
    collisionBehaviour!.addBoundaryWithIdentifier("verticalMax", fromPoint: CGPointMake(CGRectGetMaxX(view.frame), 0), toPoint: CGPointMake(CGRectGetMaxX(view.frame), CGRectGetHeight(view.frame)))
    collisionBehaviour!.addBoundaryWithIdentifier("horizontalMin", fromPoint: CGPointMake(0, CGRectGetMaxY(view.frame)), toPoint: CGPointMake(CGRectGetMaxX(view.frame), CGRectGetMaxY(view.frame)))
    collisionBehaviour!.addBoundaryWithIdentifier("horizontalMax", fromPoint: CGPointMake(0, 0), toPoint: CGPointMake(CGRectGetMaxX(view.frame), 0)) …
Run Code Online (Sandbox Code Playgroud)

ios uicollisionbehavior uikit-dynamics swift ios8.1

16
推荐指数
1
解决办法
4012
查看次数

UIKit Dynamics UICollisionBehavior碰撞没有反弹

我有一个视图,其边界设置为碰撞(setTranslatesReferenceBoundsIntoBoundaryWithInsets)和一个重力的子视图设置,以便它可以碰撞超视图边界.

我试图使碰撞0%有弹性,但我还没弄明白怎么样.我尝试了一个UIDynamicItemBehavior弹性为0的子视图,同样具有可笑的高摩擦力而且没有任何东西.我的理由是,0弹性已经意味着在力的作用下再次出现力量再生,但即使是负数似乎也没有做任何事情,也没有什么关系.

关于如何进行碰撞的任何想法都会吸收所有能量或任何使得子视图在碰撞边界时不反弹所需的能量?

uicollisionbehavior uidynamicbehavior uikit-dynamics

8
推荐指数
1
解决办法
4076
查看次数

在iOS 9中设置UIView的碰撞边界路径

在iOS中9苹果推出了collisionBoundsTypeUIKit-Dynamics.

设置此项UIDynamicItemCollisionBoundsTypeRectangle或将其设置为时,我没有任何问题UIDynamicItemCollisionBoundsTypeEllipse.

下面的屏幕截图来自我正在制作的游戏,其中collisionBoundsType玩家设置为矩形并且球被设置为椭圆:

在此输入图像描述

但是,当我将玩家设置collisionBoundsType为路径时,我会看到奇怪的行为:

在此输入图像描述

视图看起来比它应该高,碰撞体位于它应该的位置.

目前我已经collisionBoundingPath设定了这个:

- (UIBezierPath *)collisionBoundingPath
{
    maskPath = [[UIBezierPath alloc] init];
    [maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
    return maskPath;
}
Run Code Online (Sandbox Code Playgroud)

另外,我的drawRect函数如下所示:

- (void) drawRect:(CGRect)rect
{
    if (!_color){
    [self returnDefualtColor];
    }
    if (!maskPath) maskPath = [[UIBezierPath alloc] init];
    [maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
    [_color setFill];
    [maskPath fill];
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如何将碰撞体的路径设置为与视图中的图形相同?

另外,红色只是视图的背景(即view.backgroundColor = [UIColor redColor];).

objective-c ios uicollisionbehavior uikit-dynamics tvos

7
推荐指数
1
解决办法
1214
查看次数

UIDynamics和设备轮换

如果我在UIDynamicBehavior视图中添加任何类型,它会在旋转设备时完全破坏.这是肖像画(正确显示):

正确的布局

在这里它是在风景中,所有破坏:布局破碎

我不相信这是一个自动布局问题,因为如果我删除添加UIDynamicBehavior它的调用它没有自动布局问题.也不会抛出自动布局错误.这是代码:

@interface SWViewController () {
  UICollisionBehavior *coll;
  UIDynamicAnimator *dynamicAnimator;
}

@implementation SWViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  dynamicAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [self setupCollisions]; // commenting this out fixes the layout
}

- (void)setupCollisions {
  NSArray *dynamicViews = @[greenView];
  coll = [[UICollisionBehavior alloc] initWithItems:dynamicViews];    
  CGFloat topBound = CGRectGetMinY(greenView.frame);
  [coll addBoundaryWithIdentifier:@"top"
                        fromPoint:CGPointMake(0, h1)
                          toPoint:CGPointMake(CGRectGetWidth(greenView.frame), h1)];    
  [dynamicAnimator addBehavior:coll];
}
Run Code Online (Sandbox Code Playgroud)

如果我覆盖didRotateFromInterfaceOrientation我可以看到顶部边界greenView不遵循autolayout所说的应该(再次,删除调用以setupCollisions修复此问题).

自动布局边界greenView是:

height …
Run Code Online (Sandbox Code Playgroud)

autolayout ios7 uicollisionbehavior uidynamicbehavior uikit-dynamics

5
推荐指数
1
解决办法
1384
查看次数

改变UIView的界限并让UICollisionBehavior做出反应

是否可以更改UIView的边界(使用UIAttachmentBehaviors附加到其他一些UIViews)并将UICollisionBehavior与UIAttachmentBehavior结合使用(如下面的示例电影:http://www.netwalkapps.com/ ani.mov,在接触球时,UIView成长,另一球UIViews移开)?

谢谢!汤姆.

iphone objective-c ios uicollisionbehavior

3
推荐指数
1
解决办法
786
查看次数

UICollisionBehavior - UIView碰撞的自定义形状

我试图弄清楚如何使用UIKit Dynamics成功碰撞两个具有自定义边界形状的UIViews.

我可以想到解释我的问题的最基本的例子是让两个圆碰撞(考虑他们的圆角)而不是他们的方形边界.

我确定我已经在某个地方见过这个但我无法从任何官方消息来源找到关于这个主题的任何文件或讨论.

objective-c uiview ios uicollisionbehavior uikit-dynamics

3
推荐指数
1
解决办法
3449
查看次数

UICollisionBehavior边界不起作用

我在导航控制器中有一个视图.

然后我在这个视图中添加一个子视图并偏移其原点高度,使其仅覆盖屏幕的一半(另一半从屏幕底部溢出).我希望能够向上拖动此视图,但是当它到达导航栏的底部时会停止.

我正在使用a UIPanGestureRecognizer来处理视图的拖动,这很好但是它似乎不会停在边界.

这是我正在使用的代码:

bottomNavbarY = UIApplication.sharedApplication().statusBarFrame.size.height + self.navigationController!.navigationBar.frame.size.height

view.addSubview(pullover.view)
pullover.view.frame.origin.y = pulloverOffset

var animator = UIDynamicAnimator(referenceView: view)
var collision = UICollisionBehavior(items: [pullover.view])
collision.translatesReferenceBoundsIntoBoundary = true
collision.addBoundaryWithIdentifier("upper", fromPoint: CGPointMake(0, bottomNavbarY), toPoint: CGPointMake(UIScreen.mainScreen().bounds.size.width, bottomNavbarY))
animator.addBehavior(collision)
Run Code Online (Sandbox Code Playgroud)

然而,当我向上拖动覆盖视图时,它从不与任何边界相互作用,它只是直接通过.我究竟做错了什么?是否可以使用边界来停止用户以这种方式拖动的视图?

boundary ios uicollisionbehavior uidynamicanimator swift

3
推荐指数
1
解决办法
670
查看次数