0

私が持っているもの: 基本的に、水平スクロールビューで表示される UIView のコレクションがあります。UIScrollView ではページングが有効になっており、各項目は全画面表示ではないため、これに基づいて前のビューと次のビューの一部を見ることができます。 各ビューには、それ自体に削除ボタンがあります。

必要なもの: サブビューの 1 つを削除した後、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取得して、ブロックに設定するだけです。ブロックで、メソッドを使用してからこれを削除します。0 に設定するとフェード アニメーションになります。UIViewUIScrollViewview.alpha = 0animationscompletionUIViewUIScrollViewremoveFromSuperViewalpha

編集: 移動したいすべてのビューを繰り返し、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 に答える