2

UIView サブビュー アニメーションに問題があります。私がやろうとしているのは、メイン ビューを押すと、サブビューが上から下にスライドし、次のタップで上にスライドして削除されるということです。しかし、現在の状態では、最初のタップ コマンドを実行するだけで、2 回目のタップで nslog が表示されますが、ビューとアニメーションの削除は機能しません。

イベント処理関数のコードは次のとおりです。

- (void)tapGestureHandler: (UITapGestureRecognizer *)recognizer
{
NSLog(@"tap");

CGRect frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);
UIView *topBar = [[UIView alloc] initWithFrame:frame];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"topbar.png"]];
topBar.backgroundColor = background;

if (topBarState == 0) {
     [self.view addSubview:topBar];
    [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, 41.0f);}];
    topBarState = 1;
} else if (topBarState == 1){
    [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);} completion:^(BOOL finished){[topBar removeFromSuperview];}];

    NSLog(@"removed");
    topBarState = 0;
}

}

サブビューがアニメーション化され、適切に削除されるようにするにはどうすればよいですか?

よろしくお願いします

フリーサイレンティ

4

1 に答える 1

2

あなたは常にy = -41でtopBarフレームを設定しているので、topBarState = 1の場合、アニメーションは機能し、機能しy=-41 to y=-41ていないようです

CGRect frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);
UIView *topBar = [[UIView alloc] initWithFrame:frame];

ビューtopBarを作成するたびに。
.h で topBar を宣言し、viewDidLoad で init を割り当てます。

- (void)viewDidLoad {
    CGRect frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);
    topBar = [[UIView alloc] initWithFrame:frame];
    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"topbar.png"]];
    topBar.backgroundColor = background;
        [self.view addSubview:topBar];
    topBarState = 0;
}

- (void)tapGestureHandler: (UITapGestureRecognizer *)recognizer
{
    if (topBarState == 0) {
            [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, 0.0f, self.view.frame.size.width, 41.0f);}];
            topBarState = 1;
    } else if (topBarState == 1){
        [UIView animateWithDuration:0.5 animations:^{topBar.frame = CGRectMake(0.0f, -41.0f, self.view.frame.size.width, 41.0f);} completion:^(BOOL finished){[topBar removeFromSuperview];}];
        topBarState = 0;
    }
}
于 2013-01-09T13:17:23.400 に答える