在尝试从子视图数组获取视图索引时获取错误的索引

时间:2016-10-03 19:42:20

标签: ios swift

迅捷2.3 ios 9 xcode 7.3

我有 myView 它是UIView的子类,

我有一个协议 myViewObject ,它具有类型的委托属性 的 myVieDelgateProtocol

当object / class符合 myViewObject 协议时, 任何时候物体移动,它都会发送 它的来源和最终指向 myView 的代表。

在我的应用中: 我有3个对象(符合myViewObject协议的UIView子句) 它们是 myView 的子视图,

当他们通过拖动它们移动时,我检查移动的对象的索引,我检查了3个不同的对象,并且日志说明了所有对象的相同索引,(这不可能),< / p>

whay无法获得对象的正确索引吗?

import UIKit

//a protocol to make shure the conforming object/(DViewObject) is inherting from UIView
public protocol UIViewType:class {
    var  view: UIView {get}
    var  isInsideMyView:Bool {get}
}

extension UIView:UIViewType{
    public var view: UIView {return self}
    public var isInsideMyView:Bool {return self.superview is myView}
}

///a protocol for your object to conform
public protocol  myViewObject:UIViewType{
    var  delegate:myVieDelgateProtocol? {get set}
}

//DelgateProtocol
public protocol myVieDelgateProtocol {

    ///Use this method to send the Object's position from your gesture handler or from the touches methods from your object's class to the delegate
    func object(object: myViewObject , didMovedFromPoint originPoint:CGPoint, toPoint point:CGPoint)
}

extension myView:myVieDelgateProtocol{

    func object(object: myViewObject , didMovedFromPoint originPoint:CGPoint, toPoint point:CGPoint){


        let objectIndex = subviews.indexOf(object.view)
            print("object At Index \(objectIndex!) moved to position: \(object.view.center)\n")

    }
}


 class myView: UIView{}

日志: 3个不同的对象相同的索引:

  

对象在索引2处移动到位置:(198.5,58.8333282470703)

     

对象在索引2处移动到位置:(117.83332824707,   52.8333435058594)

     

对象在索引2处移动到位置:(37.5,50.8333282470703)

1 个答案:

答案 0 :(得分:0)

我找到导致问题的代码行: 在移动物体的课上我问:

// self是myViewObject

self.superview?.bringSubviewToFront(self)

因此移动时不会被其他子视图覆盖/隐藏, 这样做也改变了子视图的顺序, 如果我有3个物体并且我将一个物体带到前面,它将获得指数2 这就是它的假设。