Перетаскивание UIView, созданного после touchesBegan

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


person rob5408    schedule 31.01.2011    source источник


Ответы (1)


Я не знаю, как передать штрихи во вновь созданное представление, хотя это не значит, что нет способа сделать это. Похоже, вы действительно хотите, чтобы ваш перетаскиваемый вид обрабатывал касания, я бы, вероятно, создал каждый перетаскиваемый вид с альфа-каналом 0 в то же время, когда вы создаете неперетаскиваемые представления, а в touchesBegan установите его на 1. Если ваш не -dragable представления не должны обрабатывать прикосновения, тогда не имеет смысла заставлять их обрабатывать прикосновения только для того, чтобы передать их.

person jakev    schedule 31.01.2011
comment
Это на самом деле довольно хороший способ взглянуть на это и, вероятно, немного более логично, чем то, что я делаю. Единственная разница в том, что я могу выложить их все, и когда вы нажимаете, чтобы перетащить, под ним появляется новый. - person rob5408; 01.02.2011