У меня есть несколько подклассов 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 в другой? но в этом случае представление, которое должно получать касания, уже существует, тогда как мне нужно передать касания во вновь созданное представление.