Анимация iPhone: Как анимировать только подпредставление? Не весь вид? - PullRequest
3 голосов
/ 18 ноября 2011

Я новичок в анимации и использую следующий код для анимации Flip.

//MyMapView is UIView

MyMapView *aMapView = [[MyMapView alloc] initWithFrame:CGRectMake(0, 118, 321, 300) AndResArray:self.nearMeArray];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
    [[self view] addSubview:nearMeMap];

    [UIView commitAnimations];

Работает нормально.Но весь вид (с суперпредставлением) Flips.

Я хочу только перевернуть подпредставление, которое MyMapView.Super view не должен переворачиваться.

Как это сделать ???

EDITED

экран:

Ниже основнойэкран.При нажатии на кнопку «Карта» я хочу перевернуть только коричневую часть экрана.Весь экран не должен перевернуться.

enter image description here

Спасибо ...

Ответы [ 5 ]

3 голосов
/ 21 ноября 2011

Я должен выяснить, в чем проблема. Пожалуйста, смотрите код ниже.

MapView.m

- (id)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame];
if (self) {
    // Initialization code.

    [self performSelector:@selector(addMapView) withObject:nil afterDelay:2.0];

}
return self;
}

- (void) addMapView {

//MyMapView is UIView

MKMapView  *aMapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 321, 300)];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self cache:YES];
[self addSubview:aMapView];

[UIView commitAnimations];

}

И после этого просто добавьте объект класса MapView туда, куда хотите. как показано ниже.

//MyMapView is UIView
mapView  *aMapView = [[mapView alloc] initWithFrame:CGRectMake(0, 118, 321, 300)];
[[self view] addSubview:aMapView];

проголосуйте, если этот комментарий поможет вам.

Спасибо

MinuMaster.

2 голосов
/ 18 ноября 2011

Ответ Маттео частично верен, но вам нужно установить анимацию на экране, прежде чем добавить его, иначе он не будет работать правильно. Как это:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
                       forView:aMapView
                         cache:YES];
[self.view addSubview:aMapView];
[UIView commitAnimations];

Кроме того, вы можете использовать блочный API, представленный в iOS 4. Вот пример.

[UIView transitionWithView:aMapView
        duration:1.0
        options:UIViewAnimationTransitionFlipFromRight
        animations:^{ [self.view addSubview:aMapView]; }
        completion:^(BOOL f){ }
];
1 голос
/ 18 ноября 2011

Подобные анимированные переходы анимируют содержимое представления.Система делает снимок содержимого в начале анимации, еще один снимок при фиксации, а затем анимирует между ними.Как вы видели в исходном коде, весь вид анимируется.

Самое простое решение, вероятно, состоит в том, чтобы просто ввести промежуточный вид, который соответствует размеру и положению карты.Затем анимируйте , который будет виден при добавлении к нему карты.

Дополнительная информация приведена в разделе «Руководство по программированию представления» в Создание анимированных переходов между представлениями .Хотя используемые вами методы в iOS 4 были заменены новыми блочными версиями.

1 голос
/ 18 ноября 2011

Вам нужно добавить свой вид в self.view, а затем перевернуть только aMapView:

MyMapView *aMapView = [[MyMapView alloc] initWithFrame:CGRectMake(0, 118, 321, 300) AndResArray:self.nearMeArray];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[self.view addSubView:aMapView];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:aMapView cache:YES];

[UIView commitAnimations];
0 голосов
/ 15 марта 2013
-(void)viewDidLoad
{
    [super viewDidLoad];

    OptionView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 70, 70)];
    OptionView.backgroundColor=[UIColor blueColor];
    OptionIsShow=false;

    MoveView=[[UIView alloc] initWithFrame:CGRectMake(40, 40, 70, 70)];
    [MoveView setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:MoveView];

}

-(void)ViewOrHideOptionView
{

        CGContextRef context = UIGraphicsGetCurrentContext();
        [UIView beginAnimations:nil context:context];

        [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:self.MoveView cache:NO];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDuration:1.0];

        if(!OptionIsShow)
        {
            [self.MoveView addSubview:OptionView];
            OptionIsShow=true;
        }
        else
        {
            [self.OptionView removeFromSuperview];
            OptionIsShow=false;
        }

        [UIView commitAnimations];
}
...