Кто-нибудь успешно применял анимацию к AQGridViewCell
с? Я пытаюсь сделать каждую клетку, но первая исчезнет после нажатия.
Проблема в том, что когда начинается затухание, содержимое ячейки обычно меняется местами. Например, если в первой строке вида сетки есть ячейки с метками «1», «2», «3», то метки могут быть заменены на «1», «3», «2».
- (AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index
{
static NSString *CellIdentifier = @"ReusableGridViewCell";
AQGridViewCell *cell = (AQGridViewCell *)[gridView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"ReusableGridViewCell" owner:self options:nil];
cell = [[[AQGridViewCell alloc] initWithFrame:gridViewCellContent.frame
reuseIdentifier:CellIdentifier] autorelease];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[cell.contentView addSubview:label];
[label release];
cell.selectionStyle = AQGridViewCellSelectionStyleNone;
}
UILabel *label = [[cell.contentView subviews] objectAtIndex:0];
if (! tapped)
{
label.text = [NSString stringWithFormat:@"%u", index];
}
else if (index > 0)
{
CATransition *cellAnimation = [CATransition animation];
cellAnimation.duration = 3.0;
cellAnimation.type = kCATransitionFade;
cellAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[label.layer addAnimation:cellAnimation forKey:kCATransition]; // labels get swapped
// [cell.contentView.layer addAnimation:cellAnimation forKey:kCATransition]; // labels get swapped
// [cell.layer addAnimation:cellAnimation forKey:kCATransition]; // labels get swapped, one cell immediately disappears
NSLog(@"%u", [gridView isAnimatingUpdates]); // prints "0"
label.hidden = YES;
}
return cell;
}
- (void)gridView:(AQGridView *)aGridView didSelectItemAtIndex:(NSUInteger)index
{
tapped = YES;
[gridView reloadData];
}
Я попытался установить точки останова в куче методов AQGridView
, AQGridViewCell
и т. Д., Чтобы попытаться найти тот, который вызывает обмен. Не могу найти это.
В известных ошибках AQGridView
есть это:
Не пытайтесь накладывать несколько анимаций друг на друга. то есть
не вызывать -beginUpdates в представлении сетки, чьи -isAnimatingUpdates
метод возвращает YES. Плохие вещи произойдут, клетки окажутся в
неправильные места, сложенные друг на друга.
В приведенном выше коде -isAnimatingUpdates
возвращает NO
. Даже в этом случае, возможно, я вижу еще одну связанную ошибку в AQGridView
- я отправлю отчет об ошибке. Но так как у меня такой простой случай, мне интересно, сталкивался ли кто-нибудь с ним раньше и нашел обходной путь, возможно, какой-то способ отключить анимацию внутри AQGridView
.
Редактировать
Чтобы увидеть, была ли проблема связана со свойством hidden
, я вместо этого анимировал прозрачность ячейки (попробовал оба подхода, описанные здесь ). Даже когда непрозрачность снижается только до 0,5 вместо 0,0, ячейки по-прежнему меняются местами.