我正在尝试使用此代码制作网格视图动画,但我没有使用此代码获取网格视图动画。你能帮我怎么做吗?
Posted
技术标签:
【中文标题】我正在尝试使用此代码制作网格视图动画,但我没有使用此代码获取网格视图动画。你能帮我怎么做吗?【英文标题】:i'm trying to do grid view animation with this code,but i'm not getting grid view animation with this code.can you help me how? 【发布时间】:2014-08-30 06:41:55 【问题描述】:我遇到了这个应用程序的问题,我正在使用 tableview 做一个动画应用程序。当我滚动图像时,所有应用程序都可以正常工作,但是当我打开应用程序时,图像没有翻转,请帮助我这是我的第一个应用程序? 当我滚动图像翻转但我需要在不执行任何操作(如滚动/拖动/触摸屏幕)的情况下翻转图像。 我需要在模拟器上直接显示图像翻转我什么时候运行代码,但我没有得到准确的结果
这是我要在 .h 文件中执行的代码 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath CATransform3D 旋转 = CATransform3DMakeRotation( (90.0*M_PI)/180, .0, 0.5, 0.5); cell.contentView.layer.transform = 旋转;
CGFloat rotationAngleDegrees = 360;
CGFloat rotationAngleRadians = rotationAngleDegrees * (M_PI/360);
//CGPoint offsetPositioning = CGPointMake(200, 20);
CATransform3D transform = CATransform3DIdentity;
transform = CATransform3DRotate(transform, rotationAngleRadians, 0.0, 1.0, 0.0);
// transform = CATransform3DTranslate(transform, offsetPositioning.x, offsetPositioning.y, 0.0);
UIView *card = [cell contentView];
card.layer.transform = transform;
card.layer.opacity = 0.8;
[UIView animateWithDuration:1.0 animations:^card.layer.transform = CATransform3DIdentity;
card.layer.opacity = 1;];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
// Return the number of sections.
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
// Return the number of rows in the section.
return 100;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"RoyCard";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cellImg=(UIImage *)[cell viewWithTag:101];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.7f];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:cellImg cache:NO];
// [cell removeFromSuperview];
[UIView commitAnimations];
[UIView animateWithDuration:1.0 animations:^tableView.layer.transform = CATransform3DIdentity;
tableView.layer.opacity = 1;];
return cell;
【问题讨论】:
你能告诉我更多关于那个问题或给我看一些相关代码吗? 【参考方案1】:如果你从- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
的方法内部调用翻转图像动画,只需从那里删除它。为它编写一个单独的方法,如果可能,将该方法编写为您的子类UITableViewCell
方法的一部分。在您的 - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
中,只需在其默认状态下创建单元格。
您需要做的是,在您的应用程序加载后,第一次在viewDidAppear
中,您将必须获取UITableView
的- (NSArray *)visibleCells
方法可见的所有单元格。这将返回当前可见的所有单元格。然后,对于每个单元格,您可以调用您编写的图像翻转方法。之后,当用户滚动您的表格视图时,您可以根据您的要求使用UIScrollViewDelegate
协议的- (void)scrollViewDidScroll:(UIScrollView *)scrollView
等方法。但为此,您必须设置 UITableView
的代表。
【讨论】:
我应该在 - (NSArray *)visibleCells & - (void)scrollViewDidScroll:(UIScrollView *)scrollView 中写什么? 我不明白,请帮助我如何?【参考方案2】:当您说打开应用程序时,您的意思是从后台返回应用程序吗?
如果是,那么您应该在此处遵循此答案。 https://***.com/a/5278108/1029360
从后台打开应用不会调用viewWillAppear
方法。您应该听取该答案中提到的通知,并在收到通知时调用表视图重新加载。
【讨论】:
我的意思是当我第一次在模拟器上运行代码时,我需要直接翻转图像而不做任何滚动 您是否尝试从您的 viewWillAppear 或 viewDidApppear 方法中调用图像翻转方法? 尝试将您发布的代码移动到 tableView:willDisplayCell 委托方法。以上是关于我正在尝试使用此代码制作网格视图动画,但我没有使用此代码获取网格视图动画。你能帮我怎么做吗?的主要内容,如果未能解决你的问题,请参考以下文章
当 CABasicAnimation 正在制作动画时,我该如何回调?