UIScrollView删除子视图动画

时间:2012-10-31 09:03:04

标签: objective-c ios cocoa-touch uiscrollview

我拥有的: 基本上我有水平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中删除视图并立即运行此方法。

1 个答案:

答案 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.
   }];

}