Понимание блока завершения [UIView animateWithDuration:complete:]

Я пытаюсь понять UIView animateWithDuration:completion, Я пытаюсь перетащить UIView в другой UIView. Если они пересекаются, установите альфа перетаскивания перетаскивающего UIView на 0, а затем сбросьте перетаскивающий UIView в исходное место. Идея состоит в том, чтобы перетащить элемент в ведро. Для начала я просто устанавливаю альфа на 0, а затем сбрасываю его. Вот код, который у меня есть для распознавания жестов панорамирования в режиме перетаскивания:

else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        // Update the description view
        if (CGRectIntersectsRect(panViewPiece.frame, _descriptionView.frame)) {
            [UIView animateWithDuration:0.25 animations:^{
                self.dragDescriptionView.alpha = 0.0;
            }completion:^(BOOL finished) {
                if (finished) {
                    panViewPiece.center = _dragDescriptionViewOriginalCenter;
                    self.dragDescriptionView.alpha = 1.0;
                }
            }];
            [self updateDescriptionView];
        }
}

Поэтому я подумал, как работает блок завершения, когда первый animateWithDuration завершается, будет вызван блок завершения. Итак, я пытаюсь установить альфа на 0 в первой части, а затем, как только это будет сделано, верните panViewPiece обратно на исходную точку и установите его альфа на 1. Что происходит, когда пересекаются пересечения, альфа переходит на 0 и затем возвращается к 1, поскольку это возвращается назад к его оригинальному центру. Я не хочу, чтобы вид был видимым, пока он возвращается в исходное положение. Я правильно понимаю блок завершения? Или это не так, как это работает? Спасибо!

2 ответа

В блоке завершения вы устанавливаете альфа dragDescriptionView обратно на 1,0, после того как анимируете его до 0,0. Это то, что вы хотите? В вашем вопросе звучит так, будто вы хотите, чтобы panViewPiece имел альфа-версию 1.0, но это не то, что делает ваш код.

Я не совсем понимаю, что вы видите - затухание до альфа-0 работает хорошо, но затем вы говорите, что оно снова видимо, прежде чем вернется в исходное положение? Оживляет ли он назад видимое или оживляет назад к своей исходной позиции?

Если он просто появляется, а затем внезапно возвращается в правильное положение, то я предполагаю, что какой-то другой фрагмент кода (не показанный в вашем вопросе) устанавливает альфа обратно в 1 до того, как ваш блок анимации завершится - вы понимаете, что UIView Вызовы блочной анимации являются асинхронными, поэтому следующий код будет выполняться до или во время выполнения анимации?

Другие вопросы по тегам