Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有UIAttachmentBehavior的平移手势不适用于子视图_Ios_Objective C_Uikit Dynamics - Fatal编程技术网

Ios 带有UIAttachmentBehavior的平移手势不适用于子视图

Ios 带有UIAttachmentBehavior的平移手势不适用于子视图,ios,objective-c,uikit-dynamics,Ios,Objective C,Uikit Dynamics,我有一个具有以下层次结构的视图: self.view (with animator) |-> self.view (centered) |-> (view with gravity+push+dynamic+collision+(attachment disabled) behaviors) |-> (view with gravity+push+dynamic+collision+(attachment disabled) behaviors

我有一个具有以下层次结构的视图:

self.view (with animator)
  |-> self.view (centered) 
       |-> (view with gravity+push+dynamic+collision+(attachment disabled) behaviors)
       |-> (view with gravity+push+dynamic+collision+(attachment disabled) behaviors)
       |-> (view with gravity+push+dynamic+collision+(attachment disabled) behaviors)
       |-> (view with gravity+push+dynamic+collision+(attachment disabled) behaviors)
当手势识别器开始时,我检测视图并保留附件,并根据识别器开始状态下的原始视图中心设置其定位点。如果动画师之间没有任何中间视图,则此操作可以正常工作,但是如果有,则拖动手势不会正确映射到其位置

处理这一切的代码如下:

@IBAction private func handlePanGesture(recognizer: UIPanGestureRecognizer)
{
    let translationPoint:CGPoint = recognizer.translationInView(self.containerView);
    let point:CGPoint = recognizer.locationInView(self.containerView);

    if recognizer.state == UIGestureRecognizerState.Began
    {
        let attachment:UIAttachmentBehavior?;
        let index:Int = self.viewIndexFromPoint(point);
        if (index >= 0)
        {
            attachment = self.attachmentBehaviors[index];
            let view:RoundView = self.buttons[index];

            self.currentAttachmentBehavior = attachment;
            let anchor:CGPoint = CGPointMake(view.center.x + translationPoint.x, view.center.y + translationPoint.y);
            attachment?.anchorPoint = anchor;
            view.panGestureStartPoint = anchor;
            self.animator?.addBehavior(attachment!);
            print("added Attachment \(attachment)");

        }
        else
        {
            attachment = nil;
        }
    }
    else if ((recognizer.state == UIGestureRecognizerState.Ended ||
        recognizer.state == UIGestureRecognizerState.Cancelled ||
        recognizer.state == UIGestureRecognizerState.Failed) && self.currentAttachmentBehavior != nil)
    {
        self.animator?.removeBehavior(self.currentAttachmentBehavior!);
    }
    else
    {
        if let attachment:UIAttachmentBehavior = self.currentAttachmentBehavior
        {

            let index:Int = self.attachmentBehaviors.indexOf(attachment)!;
            let view:RoundView = self.buttons[index];
            let anchor:CGPoint = CGPointMake(view.panGestureStartPoint!.x + translationPoint.x, view.panGestureStartPoint!.y + translationPoint.y);
            attachment.anchorPoint = anchor;

        }
    }

}
我有几个问题: -容器视图始终位于我的动画按钮前面。没有与此视图关联的行为,为什么会发生这种情况,这是由与containerView superview关联的动画师造成的吗?如果需要容器视图将UI元素定位在屏幕中央,如何解决这个问题? -附件行为无法正常工作,因为它会导致视图像钟摆一样摆动,并具有较大的偏移裕度

任何帮助都将不胜感激


谢谢

我会在另一个视图上创建另一个视图,仅用于用户交互。然后它将始终在前面并接收触摸事件。对不起,你的意思是什么?根据你对问题的描述,你的一个观点似乎正在拦截触摸事件。这可以通过禁用视图中通过view.userInteractionEnabled=false截取的触摸事件来解决,或者将一个仅用于接收触摸事件的视图放置在障碍视图的顶部。