我拥有的: 基本上我有水平scrollView中呈现的UIViews的集合。 UIScrollView启用了分页,每个项目都不是全屏,因此我可以看到上一个和下一个视图的一部分based on this. 每个视图本身都有删除按钮。
我需要什么: 我需要找到一个好主意,在删除其中一个子视图后动画重新加载UIScrollView内容。我想到它会有4种不同的删除: 1.删除最后一个视图 2.删除第一个视图 3.删除中间视图 - 最难的一个 4.删除只有视图 - 最简单的一个,只是视图消失的动画
我需要一些建议/解决方案。 谢谢, 米甲
编辑:
好的,我没有完全实现它。
这是重装方法:
- (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中删除视图并立即运行此方法。
答案 0 :(得分:4)
我建议您使用+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
类的UIView
方法。只需从UIView
获取您要删除的UIScrollView
,然后在view.alpha = 0
块中设置animations
即可。在completion
块中,使用UIView
方法从UIScrollView
中删除此removeFromSuperView
。将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.
}];
}