В настоящее время я создаю плагин UI. Этот плагин имеет 2 изображения с одним над другим.UIView Анимация не работает, когда добавлен счетчик?
Когда пользователь нажимает на экран: если салфетка больше порога, переднее изображениеView покидает экран в том же направлении, что и салфетки, а затем появляется за обратным изображением.
Таким образом, мы планируем использовать это для очереди изображений. После успешного прокрутки переднее изображениеView покинет экран, а затем закроется за backImageView (теперь это спереди), а затем изменит изображение внутри.
Если фотографий больше нет, я поставлю счетчик, чтобы указать, что мы загружаем больше изображений с сервера.
Мы сталкиваемся с одной ошибкой, которую мы не можем объяснить сами: , когда мы добавляем на наш счет прядильщик, наши анимационные сбои.
Проецированное изображение больше не выходит из экрана, а возвращается в исходное положение.
Мы крайне озадачены этим и подтвердили, что
[self.view addSubview:spinner];
приведет к непредсказуемому поведению для нашей анимации.
Прилагает оштрафовать метод перемещения:
- (void)move:(UIPanGestureRecognizer *)sender {
CGPoint translatedPoint = [sender translationInView:self.frontView];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
_firstX = self.frontView.center.x;
_firstY = self.frontView.center.y;
}
translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
[self.frontView setCenter:translatedPoint];
if ([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
// Calculate the if the x-movement is greater than a threshold
float xTravelled = 0;
if (self.frontView.center.x > _firstX)
xTravelled = self.frontView.center.x - _firstX;
else
xTravelled = _firstX - self.frontView.center.x;
// Only move if xTravelled is greater than threshold
if (xTravelled > self.frontView.window.frame.size.width/3) {
NSLog(@"Swipe detected, currentIndex:%d", currentIndex);
// Lock view from panning until animation is finished.
self.view.userInteractionEnabled = NO;
float newXPosition;
if (self.frontView.center.x > _firstX) {
newXPosition = (float) self.view.frame.size.width * 2;
} else {
newXPosition = (float) -2 * self.view.frame.size.width;
}
// We should trigger a fetch as soon as the back image is empty.
if (![self getBackView].image) {
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//[self fetchComplete];
[spinner stopAnimating];
[spinner removeFromSuperview];
self.view.userInteractionEnabled = YES;
});
// Pop up spinner if necessary
if (![spinner isAnimating]) {
self.view.userInteractionEnabled = NO;
[spinner setCenter:CGPointMake(_firstX, _firstY)];
[spinner startAnimating];
/* THIS BREAKS OUR ANIMATION - Enable it to see
[self.view addSubview:spinner];
*/
}
}
// Animate the rest of the swipe
[UIView \
animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionTransitionNone
animations:^{
// Use smooth animation to move the top image out of the way
[self.frontView setCenter:CGPointMake(newXPosition, self.frontView.center.y)];
}
completion:^(BOOL finished){
// Set it to be physically behind the back image
[self.view sendSubviewToBack:self.frontView];
//[self.frontView setCenter:CGPointMake(_firstX, _firstY)]; // why not necessary??
// Now change the picture
UIImage *next = [self nextImage];
self.frontView.image = next;
// update self.top to reference the new back image
self.frontView = [self getBackView];
// Do not override spinner's block
if (![spinner isAnimating])
self.view.userInteractionEnabled = YES;
}];
} else {
NSLog(@"Swipe NOT detected");
[UIView \
animateWithDuration:0.5f delay:0.0f options:UIViewAnimationOptionAllowUserInteraction
animations:^{
[self.frontView setCenter:CGPointMake(_firstX, _firstY)];
} completion:^(BOOL finished) {
self.view.userInteractionEnabled = YES;
}];
}
}
Я понимаю, что это довольно lenghty, но я изолировал эту ошибку в образце проект, который вы можете загрузить и запустить на своем компьютере. Этот пример проекта находится здесь: http://bit.ly/WO4cEI
Мы подозреваем, что добавление subview в self.view вызывает [self.view sendSubviewToBack: self.frontView] для отказа. Но мы не уверены, почему это приводит к тому, что наша анимация тоже терпит неудачу.
Спасибо за помощь!
EDIT
@ рекомендации user2113425 о неподвижной эту проблему !!
Yup, что исправил его !!! но почему же ??? – disappearedng