我有 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)
答案 0 :(得分:0)
我找到导致问题的代码行: 在移动物体的课上我问:
// self是myViewObject
self.superview?.bringSubviewToFront(self)
因此移动时不会被其他子视图覆盖/隐藏, 这样做也改变了子视图的顺序, 如果我有3个物体并且我将一个物体带到前面,它将获得指数2 这就是它的假设。