我有一些 UIView 子类存在于一种库存中。当您点击一个时,另一个可拖动的版本会放在它上面。我希望库存版本保持不变,而您拖着其他人到处走。制作副本的代码有效,但拖动手指并不会移动它。
如果我释放然后开始拖动新创建的版本,它会按预期移动。我认为这是因为最初的触摸(造成欺骗)在响应者链中没有可拖动的版本。
一点代码...
在我固定的“图标”中......
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
[self.viewController placeDraggableItem:self.item WithPoint:self.frame.origin];
}
在我的视图控制器中...
- (void)placeDraggableItem:(Item *)item WithPoint:(CGPoint)point
{
DraggableItem *draggableItem = [[DraggableItem alloc] initWithImage:[UIImage imageNamed:item.graphic]];
draggableItem.frame = CGRectMake(point.x, scrollView.frame.origin.y + point.y, 64.0f, 64.0f);
[self.view addSubview:draggableItem];
[draggableItem release];
}
在我的 DraggableItem...
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
currentPoint = [[touches anyObject] locationInView:self];
}
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
CGPoint activePoint = [[touches anyObject] locationInView:self];
CGPoint newPoint = CGPointMake(self.center.x + (activePoint.x - currentPoint.x), self.center.y + (activePoint.y - currentPoint.y));
float midPointX = CGRectGetMidX(self.bounds);
if (newPoint.x > self.superview.bounds.size.width - midPointX)
newPoint.x = self.superview.bounds.size.width - midPointX;
else if (newPoint.x < midPointX) // If too far left...
newPoint.x = midPointX;
float midPointY = CGRectGetMidY(self.bounds);
if (newPoint.y > self.superview.bounds.size.height - midPointY)
newPoint.y = self.superview.bounds.size.height - midPointY;
else if (newPoint.y < midPointY) // If too far up...
newPoint.y = midPointY;
self.center = newPoint;
}
现在再次创建可拖动版本的作品。可拖动的版本可以在您第一次松开第一次触摸后移动。但我认为我需要让新创建的 UIView 来响应最初为“图标”所做的触摸。
有任何想法吗?
我知道这个问题有点类似于这个问题:如何将第一响应者从一个 UIView“转移”到另一个?但在这种情况下,应该接收触摸的视图已经存在,而我需要将触摸传递到新创建的视图上。