我有一个包含在UIView对象A中的UIView对象X.我想要能够触摸X并从对象A中移除它并将它移动到对象B(另一个UIView)中。 对象A和B都在同一个超级UIView中。
A B _____ _____ | | | | | X | -> | | |___| |___|这是我迄今为止所拥有的。
@implementation X_UIView float deltaX; float deltaY; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.superview.superview addSubview:self]; //pop dragged view outside of container view CGPoint beginCenter = self.center; UITouch * touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.superview]; deltaX = touchPoint.x - beginCenter.x; deltaY = touchPoint.y - beginCenter.y; } - (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { UITouch * touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.superview]; // Set the correct center when touched touchPoint.x -= deltaX; touchPoint.y -= deltaY; self.center = touchPoint; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { //discover view that event ended was over and add self as a subview. } @endI have a UIView object X that is contained in an UIView object A. I want to be able to touch X and remove it from object A and move it into object B (another UIView). Both Object A & B are inside of the same super UIView.
A B _____ _____ | | | | | X | -> | | |___| |___|This is what I have so far.
@implementation X_UIView float deltaX; float deltaY; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.superview.superview addSubview:self]; //pop dragged view outside of container view CGPoint beginCenter = self.center; UITouch * touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.superview]; deltaX = touchPoint.x - beginCenter.x; deltaY = touchPoint.y - beginCenter.y; } - (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { UITouch * touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.superview]; // Set the correct center when touched touchPoint.x -= deltaX; touchPoint.y -= deltaY; self.center = touchPoint; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { //discover view that event ended was over and add self as a subview. } @end最满意答案
调用[[touches anyObject] locationInView: self.superview]获取容器视图中手指下的点。 然后发送self.superview -hitTest:withEvent:找出视图X在里面。 请注意,它将始终返回X,因此您必须在拖动时重写-pointIsInside:withEvent:或-hitTest:withEvent:以返回nil。 这种kludge是我在容器视图中实现这种跟踪的原因,而不是在拖动视图中。
Call [[touches anyObject] locationInView: self.superview] to get the point under the finger in the container view. Then send self.superview -hitTest:withEvent: to find out the view X is inside. Note that it will always return X, so you will have to override either -pointIsInside:withEvent: or -hitTest:withEvent: to return nil while you're dragging. This kind of kludge is the reason I would implement such tracking in the container view, rather than in a dragged view.
更多推荐
发布评论