我有: 基本上我有水平 ScrollView 中显示的 UIViews 集合。 UIScrollView 启用了分页并且每个项目都不是全屏所以我可以看到上一个和下一个 View 的一部分 based on this. 每个 View 本身都有删除按钮。
我需要: 在删除其中一个 subview 后,我需要找到动画重新加载 UIScrollView 内容的好主意。正如我所想的那样,将有 4 种不同的删除: 1.删除最后一个 View 2.删除第一 View 3.删除中间 View -最难的一个 4. 只删除 View ——最简单的一个,只是 View 消失的动画
我需要一些建议/解决方案。 谢谢, 迈克尔
编辑:
好吧,我还没有完全实现它。
这里是重载方法:
- (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 都有带委托(delegate)的删除按钮,委托(delegate)从 viewsArray 中删除 View 并暂时运行此方法。
最佳答案
我建议你使用 + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
UIView
类的方法。只需从 UIScrollView
中获取要删除的 UIView
并在 animations
block 中设置 view.alpha = 0
.在 completion
block 中,使用 removeFromSuperView
方法从 UIScrollView
中删除此 UIView
。将 alpha
设置为 0 将制作渐变动画。
编辑: 迭代所有要移动的 View 并更改它的 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.
}];
}
关于objective-c - UIScrollView 移除 subview 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154399/