我是iOS新手,我试图找出如何为tableView标题设置动画,使其看起来像从视图顶部向下滑动,在那里停留3秒钟,然后向上滑动并消失。
我之前没有做过任何动画,所以我真的可以使用一些帮助。我不知道从哪里开始。我看过这里的其他答案,但似乎无法弄清楚如何做到这一点。
我的表格视图在我的UITableViewController类的viewDidLoad中显示得很好
self.headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320,15)];
self.headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 15)];
self.headerLabel.textAlignment = NSTextAlignmentCenter;
self.headerLabel.text = @"some text";
[self.headerView addSubview:self.headerLabel];
self.tableView.tableHeaderView = self.headerView;
self.tableView.tableHeaderView.frame = CGRectMake(0, 0, 320, 15);
我认为我需要为框架的高度设置动画。
编辑:我发现这个代码似乎应该可以工作,但是当动画运行时它会崩溃我的应用程序
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[UIView animateWithDuration:3.0f
delay:0.0f
options: UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.headerView.frame = CGRectMake(0.0f, 0.0f, 320.f, 0.0f);
}
completion:^(BOOL finished) {
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}];
}
答案 0 :(得分:0)
我不知道您是否可以像想要的那样为表格视图的标题视图设置动画。对于像Table视图这样复杂的UI对象,Apple倾向于将构成对象的视图视为私有,并且当您尝试操作视图层次结构时,往往会发生不良事件。
如果您没有使用自动布局,并且想要为属于您的视图层次结构的另一个视图设置动画,那么您的代码可能就像这样简单:
CGPoint center = myView.center;
CGFloat myViewBottom = myView.frame.origin.y + myView.frame.origin.size.height;
//Move the view above the top of it's superview before starting the animation.
center.y -= myViewBottom;
//Animate the view down into position
[UIView animateWithDuration: .2
animations:
^{
myView.center += myViewBottom;
};
completion:
^{
//As the completion block for the first animation, trigger another
//animation to animate the view away again. This time delay
//for 3 second before the 2nd animation.
[UIView animateWithDuration: .2
delay: 3.0
options: 0
animations:
^{
myView.center -= myViewBottom;
};
completion: nil
}
];
答案 1 :(得分:0)
尝试使用beginUpdates和endUpdates,这是一个例子:
标题中的
@property NSInteger newOffset;
实现:
- (void) colapseHeader
{
_newOffset = 50;
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 50 + _newOffset;
}
- (void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
_newOffset = 100;
[self.tableView beginUpdates];
[self.tableView endUpdates];
[self performSelector:@selector(colapseHeader) withObject:nil afterDelay:3];
}