0

我所拥有的:基本上我收集了在水平滚动视图中呈现的 UIView。UIScrollView 启用了分页,并且每个项目都不是全屏的,因此我可以基于此查看上一个和下一个视图的一部分。 每个视图本身都有删除按钮。

我需要什么:我需要找到一个好主意,在删除一个子视图后为重新加载 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 中删除视图并暂时运行此方法。

4

1 回答 1

4

我建议你使用类+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion的方法UIView。只需获取您UIView要删除的内容,UIScrollView然后将其设置view.alpha = 0animations块即可。在completion块中删除这个UIViewUIScrollView使用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.
   }];

}
于 2012-10-31T12:58:17.890 回答