2013-06-17 5 views
0

Я пытаюсь получить мое приложение, чтобы сделать базовое изменение фона с 3 экранов. Вот мой .h файл.Image Changer in iOS

#import <UIKit/UIKit.h> 

@class BIDYellowViewController; 
@class BIDBlueViewController; 
@class BIDGreenViewController; 

@interface BIDSwitchViewController : UIViewController 

@property (strong, nonatomic) BIDYellowViewController *yellowViewController; 
@property (strong, nonatomic) BIDBlueViewController *blueViewController; 
@property (strong, nonatomic) BIDGreenViewController *greenViewController; 

- (IBAction)switchViews:(id)sender; 


@end 

и вот мой метод в файле .m, что при нажатии кнопки IBAction, то SuperView будет переходить от одного экрана к другому и по-прежнему в цикле их вращения.

- (IBAction)switchViews:(id)sender { 
//animations 
    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:1.25]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
//loads yellow 
    if (self.yellowViewController.view.superview == nil) { 
     if (self.yellowViewController == nil) { 
      self.yellowViewController = [[BIDYellowViewController alloc]initWithNibName:@"YellowView" bundle:nil]; 
     } 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 
//removes blue 
     [self.blueViewController.view removeFromSuperview]; 
     [self.view insertSubview:self.yellowViewController.view atIndex:0]; 
//loads green 
    } else if(self.greenViewController.view.superview == nil){ 
     if (self.greenViewController == nil) { 
      self.greenViewController = [[BIDGreenViewController alloc] initWithNibName:@"GreenView" bundle:nil]; 
     } 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 
//removes yellow 
     [self.yellowViewController.view removeFromSuperview]; 
     [self.view insertSubview:self.greenViewController.view atIndex:0]; 

//loads blue 
    } else if(self.blueViewController.view.superview == nil){ 
     if (self.blueViewController == nil) { 
      self.blueViewController = [[BIDBlueViewController alloc] initWithNibName:@"BlueView" bundle:nil]; 
     } 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 
//removes green 
     [self.greenViewController.view removeFromSuperview]; 
     [self.view insertSubview:self.blueViewController.view atIndex:0]; 
    } 
    [UIView commitAnimations]; 
} 

проблема, с которой я столкнулся, заключается в том, что в первом цикле она дважды повторяет зеленый экран, а затем продолжает работу и работает правильно. Я что-то упускаю или должен использовать оператор switch: case (и если да, то как бы я это сделал)?

+0

Если у вас есть viewControllers, то wh y вы используете addSubView ?.Or простое использование UIView нет необходимости использовать три viewControllers – Warewolf

+0

вы хотите повторить его? Или прекратите повторять его – Warewolf

+0

Мне нужно его повторить. Когда кнопка нажата, она поворачивается на «желтый»; нажмите его еще раз, и он вращается на зеленый; нажмите его еще раз, и он поворачивается на синий; нажмите снова, он вращается до желтого, .... и т. д. и т. д.. Я совершенно новый для iOS/Xcode и не знаю, где включить ваши предложения? Мне нужно установить, чтобы каждый цвет имел .h и .m-файл, который я уже создал. Некоторые из ваших предложений идут в этих файлах? Более подробная помощь будет оценена. – jsollo2

ответ

0

Если хотите повторить его непрерывно затем использовать глобальную переменную счетчика, как

static int count=0; 

и использовать код, как:

- (IBAction)switchViews:(id)sender 
{ 
    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:1.25]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES]; 

    switch (count) { 
     case 0: 

      [greenView removeFromSuperview]; 
      [blueView removeFromSuperview]; 

      [self.view addSubview:yellowView]; 
      break; 
     case 1: 

      [yellowView removeFromSuperview]; 
      [greenView removeFromSuperview]; 

      [self.view addSubview:blueView]; 

      break; 
     case 2: 

      [blueView removeFromSuperview]; 
      [yellowView removeFromSuperview]; 

      [self.view addSubview:greenView]; 

      break; 

    } 

    count++; 

    if (count==3) { 
     count=0; 
    } 

    [UIView commitAnimations]; 
} 

вы также можете использовать три XIb с одной ViewController, просто нужно изменить класс вашего xib для класса ViewController, который вы хотите использовать следующим образом:

BIDViewController *yellowViewController; 
BIDViewController *blueViewController; 
BIDViewController *greenViewController; 


self.yellowViewController = [[BIDViewController alloc]initWithNibName:@"YellowView" bundle:nil]; 
self.greenViewController = [[BIDViewController alloc] initWithNibName:@"GreenView" bundle:nil]; 
self.blueViewController = [[BIDViewController alloc] initWithNibName:@"BlueView" bundle:nil];