UIScrollView 删除子视图动画
Posted
技术标签:
【中文标题】UIScrollView 删除子视图动画【英文标题】:UIScrollView remove subview animated 【发布时间】:2012-10-31 09:03:04 【问题描述】:我有什么: 基本上,我收集了水平滚动视图中呈现的 UIView。 UIScrollView 启用了分页,每个项目都不是全屏的,所以我可以看到上一个和下一个视图的一部分based on this. 每个视图本身都有删除按钮。
我需要什么: 在删除一个子视图后,我需要找到一个好主意来动画重新加载 UIScrollView 内容。正如我所想的那样,将有4种不同的删除方式: 1.删除最后一个视图 2.删除第一个视图 3.删除中间视图-最难的一个 4. 删除唯一视图 - 最简单的一种,只是视图消失的动画
我需要一些建议/解决方案。 谢谢, 迈克尔
编辑:
好的,我还没有完全实现。
这里是reload方法:
- (void)loadScrollView
for(UIView* view in [_scrollView subviews])
[view removeFromSuperview];
CGRect frame = self.scrollView.frame;
frame.origin.x = 0;
frame.origin.y = 0;
int i = 0;
_scrollView.clipsToBounds = NO;
_scrollView.pagingEnabled = YES;
_scrollView.showsHorizontalScrollIndicator = NO;
for(MPContact* contact in self.items)
frame.origin.x = self.scrollView.frame.size.width*i;
MyView *view = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0];
[view setFrame:frame];
i++;
[view.nameAndSurnameLabel setText:@"view text"];
[view setDelegate:self];
[self.scrollView addSubview:view];[self.viewsArray addObject:view];
[self.scrollView setContentSize:CGSizeMake(frame.size.width*[self.items count], frame.size.height)];
每个 MyView 都有带委托的删除按钮,委托从 viewsArray 中删除视图并暂时运行此方法。
【问题讨论】:
你能发布你的代码(相关部分)吗? 注意到您的编辑。如何给每个视图一个标签 ID,以便您可以找到视图并相应地删除它们? 我有方法创建我要删除的视图,问题是删除这个视图后如何处理其他视图(如何在scrollView的良好位置平滑动画) 【参考方案1】:我建议你使用UIView
类的+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
方法。只需从UIScrollView
中获取您要删除的UIView
并在animations
块中设置view.alpha = 0
。在completion
块中,使用removeFromSuperView
方法从UIScrollView
中删除这个UIView
。将alpha
设置为 0 将制作淡入淡出动画。
编辑: 迭代所有要移动的视图并更改它的 x 坐标。
for(UIView *view in scrollview.subviews)
[UIView animateWithDuration:0.1 animations:^
[view setFrame:CGRectMake(view.x-(/*HERE YOU NEED TO PUT WIDTH OF TOUR DELETING VIEW*/),view.y,view.width,view.heigh)];
completion:^(BOOL finished)
//remove view from superview and change your uiscrollview's content offset.
];
【讨论】:
我知道怎么做消失的动画,但是我需要重新加载 UIScrollView 的漂亮干净的动画(如果我不重新加载它会有洞,如果我这样做的话,在空洞中移动视图将没有动画) 这对我有帮助(需要对其进行编辑以处理所有 4 种删除)。谢谢 @user1315378,是的,这段代码移动了所有子视图。支持我的回答并接受它:)以上是关于UIScrollView 删除子视图动画的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自动布局在 UIScrollView 中为视图高度设置动画?
我是不是需要删除 UIScrollView 中不可见的子视图以使其平稳运行?