2013-08-23 5 views
7

Chcę pokazać UIView po naciśnięciu przycisku z animacją, mogę pokazać widok, ale nie mogę go ukryć, ponownie wcisnąłem ten przycisk. Oto mój kod do pokazania/ukrycia widok. aby pokazać UIView:Jak ukryć/pokazać UIView z animacją w iPhonie

sliderView.frame = CGRectMake(130, 20, 0, 0); 
    [UIView animateWithDuration:0.25 animations:^{ 
    sliderView.frame = CGRectMake(130, 30, 100, 200); 
    }]; 

aby ukryć UIView:

 [UIView animateWithDuration:0.25 animations:^{ 
    sliderView.frame = CGRectMake(130, 30, 0, 0); 
    }]; 

Korzystanie powyżej widoku kodu wyświetla animacji, ale nie ukrywa. Czy ktoś wie jak go ukryć, Proszę o pomoc, Dzięki

+0

kod zamieszczonych powinien skurczyć 'sliderView' dół nic. Co się teraz dzieje? Nie mówisz nam, jaki jest prawdziwy problem. – rmaddy

+0

Zmieniłem moje pytanie. – user2586519

+0

Jak ten kod może wyświetlać widok? Zmniejsza szerokość i wysokość ramki do 0. Czy na pewno wywoływany jest kod ukryty w widoku? – rmaddy

Odpowiedz

18

Twój kod działa, użyłem go. Spójrz kod poniżej
.h pliku: Plik

#import <UIKit/UIKit.h> 

@interface StackoverflowTestViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIView *cautionView; 


- (IBAction)btnToggleClick:(id)sender; 
@property (strong, nonatomic) IBOutlet UIButton *btnToggle; 
@end 


.m:

#import "StackoverflowTestViewController.h" 

@interface StackoverflowTestViewController() 

@end 

@implementation StackoverflowTestViewController 

bool isShown = false; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)btnToggleClick:(id)sender { 
    if (!isShown) { 
     _cautionView.frame = CGRectMake(130, 20, 0, 0); 
     [UIView animateWithDuration:0.25 animations:^{ 
      _cautionView.frame = CGRectMake(130, 30, 100, 200); 
     }]; 
     isShown = true; 
    } else { 
     [UIView animateWithDuration:0.25 animations:^{ 
      _cautionView.frame = CGRectMake(130, 30, 0, 0); 
     }]; 
     isShown = false; 
    } 
} 
@end 
+0

Dzięki Binh Lee, Również chcę dodać widok obrazu w tym UIView, więc czy mogę zmienić ramkę obrazu jak UIView ?? – user2586519

+0

człowiek bez problemu, (1).możesz dodać ImageView do tego UIView i zmienić ramkę na tym UIView (2) zmienić UIView powyżej z ImageView bez problemu – MOBYTELAB

+0

@BinhLee Używam dla twojego kodu, że _cautionView jest animowany. dodałem dwa UILabel do tego _cautionView. Ta etykieta nie jest ukryta podczas animowania. – Thangavel

0

Zastosuj Initial/ramkę wychodząc z was View jest

sliderView.frame = CGRectMake(130, 480, 100, 200); 

Give tagiem przycisk takich jak

myButton.tag = 101;

I metoda przycisku

-(void)MyButonMethod:(UIButton *)sender 
{ 
    if(sender.tag == 101) 
    { 
    [UIView animateWithDuration:0.25 animations:^{ 
     sliderView.frame = CGRectMake(130, 30, 100, 200); 
    }]; 

    sender.tag = 102; 
    } 
    else 
    { 
    [UIView animateWithDuration:0.25 animations:^{ 
     sliderView.frame = CGRectMake(130, 480, 100, 200); 
    }];  
    sender.tag = 101; 
    } 
} 
+0

http://stackoverflow.com/a/29080894/1442541 – evya

0

Wypróbuj:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:.25]; 
[sliderView setFrame:CGRectMake(130, 30, 0, 0)]; 
[UIView commitAnimations]; 
+2

Są to stare i nieaktualne. Apple zaleca korzystanie z wersji blokowych (jak pokazano w oryginalnym pytaniu). – rmaddy

4

Możesz użyć właściwości alfa i ukrytej właściwości UIView, aby ukryć swój sliderView. Spróbuj następującego kodu:

/*To unhide*/ 
[sliderView setHidden:NO]; 
sliderView.frame = CGRectMake(130, 20, 0, 0); 
[UIView animateWithDuration:0.25 animations:^{ 
    sliderView.frame = CGRectMake(130, 30, 100, 200); 
    sliderView.alpha = 1.0f; 
} completion:^(BOOL finished) { 
}]; 

/*To hide*/ 
[UIView animateWithDuration:0.25 animations:^{ 
    sliderView.frame = CGRectMake(130, 30, 0, 0); 
    [sliderView setAlpha:0.0f]; 
} completion:^(BOOL finished) { 
    [sliderView setHidden:YES]; 
}]; 
+0

To działa dla mnie .. Jeśli korzystasz z tablicy opowieści, możesz dodać uiview i dostosować ją do swoich potrzeb. Jeśli tak, to możesz usunąć wartości CGRectMake sliderView.frame –

6
-(void)fadeInAnimation:(UIView *)aView { 

    CATransition *transition = [CATransition animation]; 
    transition.type =kCATransitionFade; 
    transition.duration = 0.5f; 
    transition.delegate = self; 
    [aView.layer addAnimation:transition forKey:nil]; 
    } 

Add Subview: 

    [self.view addsubView:mysubview]; 
    [self fadeInAnimation:self.view]; 

Remove SubView: 

     [mySubView removefromSuperView]; 
     [self fadeInAnimation:self.view]; 
2

spróbować

- (IBAction)eventparameter:(id)sender 
{ 
    if ([self.parameterview isHidden]) 
    { 
     [UIView beginAnimations:@"LeftFlip" context:nil]; 
     [UIView setAnimationDuration:0.8]; 
     _parameterview.hidden=NO; 
     [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
     [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:_parameterview cache:YES]; 
     [UIView commitAnimations]; 
    } 
    else 
    { 
     [UIView transitionWithView:_parameterview 
          duration:0.4 
          options:UIViewAnimationOptionTransitionCurlUp 
         animations:NULL 
         completion:NULL]; 

     [self.parameterview setHidden:YES]; 
    } 
} 
Powiązane problemy