CA анимация UIView внутри UITableView. Как тот, на ITunes - PullRequest
0 голосов
/ 30 октября 2011

Я проверял этот сайт на многие из моих вопросов раньше, но мне впервые приходится что-то задавать, поэтому я надеюсь, что смогу прояснить ситуацию достаточно.

У меня есть приложение, которое почти готово. Основной функционал работает. Я только заинтересован в том, чтобы сделать все приложение визуально привлекательным. Приложение представляет собой базу данных, которая содержит научные данные. Я хочу, чтобы пользователь мог хранить пользовательские данные в БД и для этого создал «контактное» представление, где пользователь может сохранить некоторые данные. Представление содержит таблицу, и внутри этой таблицы ячейка имеет UITextFields. После ввода данных, когда пользователь нажимает кнопку, я хочу анимировать содержимое textField в виде шкафа. Очень похоже на то, когда вы покупаете что-то в iTunes на устройстве iOS. Я смог сделать эту анимацию в «статическом» виде (не в UITableView), играя с начальной точкой, конечной точкой и т. Д., Это немного болезненно, но в конце концов выполнимо. Думаю, я делаю анимацию не совсем обычным способом, но на самом деле очень эффективно. При нажатии кнопки я создаю UILabel, я устанавливаю текст как текст textField, а затем я использую блок viewAnimationWithDuration для анимации метки. Внутри блока я также использую Core Animation для анимации слоя метки на пути. Снова, не обычный, но прямо вперед.

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

Код, который я использую, выглядит следующим образом:

- (IBAction) saveCustom: (идентификатор) отправитель {

UILabel *imageViewForAnimation = [[UILabel alloc] initWithFrame:CGRectMake(l1, l2, l3, l4)];
imageViewForAnimation.text=label.text;
imageViewForAnimation.alpha = 1.0f;
imageViewForAnimation.backgroundColor=[UIColor clearColor];
imageViewForAnimation.textColor=[UIColor blackColor];
imageViewForAnimation.adjustsFontSizeToFitWidth=YES;

[self.view addSubview:imageViewForAnimation];    




[UIView animateWithDuration:10.0 
                      delay:0.0 
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{


                     // Set up path movement Core Animation begins
                     CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

                    CGPoint endPoint = CGPointMake(310, 380); // final point
                    CGMutablePathRef curvedPath = CGPathCreateMutable();

                     CGPoint rootViewPoint = [imageViewForAnimation convertPoint:imageViewForAnimation.center toView:taula];


                     CGPathMoveToPoint(curvedPath, NULL, rootViewPoint.x, rootViewPoint.y);  // initial point
                     CGPathAddCurveToPoint(curvedPath, NULL, 100, 100, 100, 100, endPoint.x, endPoint.y);
                     pathAnimation.path = curvedPath;
                     CGPathRelease(curvedPath);

                     pathAnimation.fillMode=kCAFillModeForwards;
                     pathAnimation.removedOnCompletion=NO;
                     pathAnimation.duration=10.0f;
                     pathAnimation.delegate=self;

                     [imageViewForAnimation.layer addAnimation:pathAnimation forKey:@"savingAnimation"];
                     [imageViewForAnimation release];
                     //Core Animation ends



                     imageViewForAnimation.transform=CGAffineTransformMakeScale(0.60, 0.60);
                    // imageViewForAnimation.alpha=0.2;
                 }
                 completion:^(BOOL finished){

                     [imageViewForAnimation removeFromSuperview];
                 } ];

}

Любая помощь о том, как действовать, будет высоко ценится.

Заранее спасибо!

UPDATE:

Я ходил на Apple Tech Talks в Берлине. В лабораториях, которые они получили, я спросил об этом инженера. Он задавался вопросом, что код, который я ему показал, не работает. Я написал ему по электронной почте, и он вернется ко мне.

Ключевым моментом является преобразование координат из таблицы в представление.

Ответы [ 2 ]

0 голосов
/ 30 октября 2011

Мне кажется довольно обычной анимацией. И да, эффективно.

Что касается решения, вам просто нужно сохранить некоторую информацию о состоянии, когда пользователь запрашивает сохранение. И нарисуйте свой анимационный ярлык на столе. Там не должно быть никаких серьезных проблем, пока у вас есть доступный вид, может быть супер вид таблицы?

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

Кроме того, не забудьте выпустить свой UILabel после того, как вы добавите его в качестве подпредставления, вы пропускаете его в коде выше.

0 голосов
/ 30 октября 2011

A UITableView показывает число UITableViewCell с. Если вы хотите настроить элементы управления, отображаемые в ячейке, вы можете добавить дополнительные элементы управления к contentView для UITableViewCell. В зависимости от того, насколько сложны ваши потребности, вы можете сделать это в UITableViewDelegate или с помощью подкласса UITableViewCell. Просто имейте в виду, что добавление подпредставлений к contentView, скорее всего, будет мешать встроенным элементам управления (например, textLabel или detailTextLabel).

Чтобы установить дополнительные элементы управления или анимационные эффекты, вы можете проверить bounds ячейки contentView. Добавьте ваши элементы управления как подпредставления contentView, анимируйте их, и не забудьте удалить их, когда они вам больше не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...