Подтвердить что ты не робот

Как перевернуть отдельный UIView (без отображения родительского представления)

Это проект iPad, в котором у меня есть UIView с несколькими subViews, и я пытаюсь оживить один из этих UIViews, используя [UIView transitionFromView: toView: duration: options: completion], но когда я запускаю этот метод, весь родитель просмотр перевернулся! Это код, который я использую:

UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 300, 300)];
[newView setBackgroundColor:[UIColor redColor]];
    [UIView transitionFromView:self.firstView.view toView:secondView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];

Любая идея о том, как я могу переключаться между этими представлениями без анимации всего родительского представления? Спасибо!

4b9b3361

Ответ 1

этот код может помочь вам:

поместите два вида, которые вы хотите перевернуть внутри неназванного вида с одинаковым размером и привяжите IBOutlet UIView *newView,*oldView; к представлениям и поместите новый вид сверху

bool a = NO;

@implementation ViewController

- (IBAction)flip:(id)sender 
{
    if (a == NO) {
        [UIView transitionFromView:oldView toView:newView  
                  duration:1.0 
                  options:UIViewAnimationOptionTransitionFlipFromLeft 
                  completion:NULL];
        a = YES; // a = !a;
    }
    else {
        [UIView transitionFromView:newView toView:oldView  
                  duration:1.0 
                  options:UIViewAnimationOptionTransitionFlipFromLeft 
                  completion:NULL];
        a = NO; // a = !a;
    }
}

Ответ 2

У меня были проблемы с тем, чтобы это работало. Я использовал код, написанный Флорисом, но, хотя он работал для первого "флип", следующий флип начал странно выглядеть, когда кнопки и метки на лицевом UI View потеряли свои позиции.

Я поставил код на место, и он работает нормально.

Несколько замечаний:

  • panelView - это элемент управления UIView на ViewController, в котором есть два других UIViews внутри него (subviews). Первый называется frontView, второй - backView. (см. рисунок ниже).

image of the view and subviews in IB

  1. У меня есть свойство bool, называемое displayFront в классе

(в моем .h)

@property BOOL displayingFront;

в моем .m

@synthesize displayingFront;

в моем методе viewDidLoad

self.displayingFront = YES;

Это код в .m, который я привязал к двум кнопкам, если передними и задними UIViews...

- (IBAction)flip:(id)sender
{
    [UIView transitionWithView:self.panelView
                      duration:1.0
                       options:(displayingFront ? UIViewAnimationOptionTransitionFlipFromRight :
                                UIViewAnimationOptionTransitionFlipFromLeft)
                    animations: ^{
                        if(displayingFront)
                        {
                            self.frontView.hidden = true;
                            self.backView.hidden = false;
                        }
                        else
                        {
                            self.frontView.hidden = false;
                            self.backView.hidden = true;
                        }
                    }

                    completion:^(BOOL finished) {
                        if (finished) {
                            displayingFront = !displayingFront;
                        }
                    }];
}

Ответ 3

Используйте представление контейнера для хранения ваших подзонов и сделайте контейнер вид того же размера, что и ваш подзаголовок, который вы пытаетесь оживить.

Итак, вы можете настроить свои представления следующим образом.

self.view- > "вид контейнера" → subviews

Ответ 4

**//flipping view continuously**  



 bool a = NO;


-(void)viewDidLoad
{



// THIS is the canvass holding the two views this view is flipping
 UIView *v=[[UIView alloc]initWithFrame:CGRectMake(40, 40, 150, 150)];

   v.backgroundColor=[UIColor clearColor];

    [self.view addSubview:v];

     [v addSubview:yourfirstview];
     [v addSubview:yoursecondview];

// calling the method

[NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(flip)
                                   userInfo:nil
                                    repeats:YES];

}



//flipping view randomly

-(void)flip 

{

if (a == NO) 
{

[UIView transitionFromView:yourfirstview toView:yoursecondview duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
        a = YES;
    }

else if(a==YES) 
{

[UIView transitionFromView:yoursecondview toView:yourfirstview duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
     a = NO;
  }

}

Ответ 5

Я исправил эту проблему, используя анимацию старой школы:

[UIView beginAnimations:@"Flip" context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:firstView cache:YES];

[self addSubview:secondView];

[UIView commitAnimations];

Кроме того, вы можете удалить firstView:

[firstView removeFromSuperview];