2012-01-03 1 views
0

У меня есть приложение, которое имитирует приложение для фотографий, в котором отображается таблица миниатюр, которые представляют собой альбом, на который пользователь нажал. У меня возникают проблемы с имитацией анимации этого окна, когда происходит ротация. Для справки окно я говорю о ниже:Как имитировать поворот из приложения для фотографий на миниатюре

enter image description here enter image description here

Я могу получить конечный результат получится нормально (то есть после завершения анимации, все работает), однако моя ротация не выглядит так хорошо, как приложение для фотографий. Приложение на самом деле выглядит так, будто оно поворачивает окно, и вы едва можете заметить сброс фотографий. На моем, вы можете видеть, что эскизы передвигаются, и это выглядит не так хорошо.

Кто-нибудь знает, что делает приложение для фотографий? Возможно ли, что это ускорит анимацию или, возможно, размывает ее посередине, чтобы вы не могли видеть, что происходит? Мой код приведен ниже:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    else 
    { 
     for (UIButton *photoButton in [cell subviews]) 
     { 
      [photoButton removeFromSuperview]; 
     } 
    } 

    NSInteger photosPerRow; 

    if (self.interfaceOrientation == UIInterfaceOrientationPortrait) 
    { 
     photosPerRow = 4; 
    } 
    else 
    { 
     photosPerRow = 6; 
    } 

    CGRect frame = CGRectMake(4, 2, 75, 75); 

    for (int i = [indexPath row] * photosPerRow; i < (([indexPath row] * photosPerRow) + photosPerRow) && i < [[self photos] count]; i++) 
    { 
     [[photos objectAtIndex:i] setFrame:frame]; 
     [cell addSubview: [photos objectAtIndex:i]]; 
     frame.origin.x = frame.origin.x + frame.size.width + 4; 
    } 

    return cell; 
} 

Тогда вот как я оживляющий его в мой контроллер Tableview:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    [self.tableView reloadData]; 
    return (toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

UPDATE: Ну, я пробовал много. Пока переключился весь мой код на вид прокрутки, а затем попытался создать анимированные миниатюры, когда происходит поворот: выцветать эскиз, переместить его в новое место, а затем угаснуть. Конечно, я сделал это только с помощью UIThumbViews которые необходимо перенести. Я прихожу к выводу, что яблоко должно использовать два вида, чтобы вытащить их. Один вид со старым набором миниатюр, затем поворот над новым набором миниатюр. Есть идеи?

+2

Я могу гарантировать вам, что фото приложение не будет использовать 'UITableView'. Я бы сделал это с помощью 'UIScrollView', а затем, когда вы вращаетесь, вы перемещаете рамки отдельных изображений вокруг, и тогда все должно выглядеть гладко. – mattjgalloway

+0

Я согласен с mattjgalloway. Если бы я был вами, я бы подклассифицировал UIScrollView и создавал метод для ввода numberOfThumbnailPerRow и индекса строки в качестве входов и возвращал массив NSValue с CGPoints для начала каждого квадрата (Thumbnails). – Canopus

+0

Вы абсолютно не используете UIScrollView, вы используете UITableView, поэтому он будет загружать только миниатюры, отображаемые на экране, и деактивировать ячейки, которые уже были использованы. Нет смысла внедрять все эти функции, когда Apple делает это за вас. И о, да, вращение может быть сделано в двух строках, если вы реализуете его с помощью tableview, а не с помощью scrollview. –

ответ

0

ОБНОВЛЕНО: Это занимает две строки кода, и вы должны реализовать в режиме просмотра миниатюр в tableview, не scrollView:

[self.tableView reloadRowsAtIndexPaths: [self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView reloadData]; 
Смежные вопросы