2012-02-05 3 views
0

Я создаю виды, элементы пользовательского интерфейса и т. Д. Программно. Я пытаюсь анимировать представления, когда они добавляются или удаляются. Проблема в том, что анимируется только кнопка UIButton *, и она анимирована неправильно. Я имею в виду, что название кнопки происходит сверху, а сама кнопка идет справа от экрана.Странная анимация во время просмотра коммутатора

Пожалуйста, смотрите ниже код

AppDelegate.h

#import <UIKit/UIKit.h> 
#import "TViewController.h" 
@interface AppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    TViewController *tv; 
} 

@property (strong, nonatomic) TViewController *tv; 
@property (strong, nonatomic) UIWindow *window; 

@end 

AppDelegate.m .....

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    self.window.backgroundColor = [UIColor whiteColor]; 
    self.tv = [[TViewController alloc]initWithNibName:@"TViewController" bundle:nil]; 
    self.window.rootViewController = self.tv; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

TViewController.h

#import <UIKit/UIKit.h> 
#import "Elements.h" 
@interface TViewController : UIViewController 
{ 
    Elements *el; 
} 

@property (nonatomic, retain) Elements *el; 
@end 

TViewController.m

-(void)loadView 
{ 
    self.view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; 

    self.el = [[Elements alloc] 
       initWithNibName:@"Elements" 
       bundle:nil]; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:3.0]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view.superview cache:YES]; 
    [self.view addSubview:self.el.view]; 
    self.view.backgroundColor = [UIColor grayColor]; 
    [self.view removeFromSuperview]; 
    [UIView commitAnimations]; 

} 

Elements.m

self.view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; 

    UILabel *howManyUsersLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 20, 300, 150)]; 
    howManyUsersLabel.text = @"Label ..."; 
    [self.view addSubview:howManyUsersLabel]; 


    UIPickerView *playersPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(10, 150, 250, 100)]; 
    playersPickerView.delegate = self; 
    playersPickerView.showsSelectionIndicator = YES; 
    [self.view addSubview:playersPickerView]; 


    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(20, 370, 280, 50); 
    [button setTitle:@"Button" forState:UIControlStateNormal]; 

    [self.view addSubview:button]; 

ответ

0

Переходы должны быть применены к виду, что не будут удалены или добавлены во время перехода. Вы добавляете переход к self.view, но затем вы удаляете self.view во время перехода.

Попробуйте добавить переход к self.view.superview вместо этого, как это:

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view.superview cache:YES]; 

Если это все еще не работает, вы уверены, что этот код является правильным:

[self.view addSubview:self.el.view]; 
self.view.backgroundColor = [UIColor grayColor]; 
[self.view removeFromSuperview]; 

Буквально , этот код говорит:

add self.el.view as a subview to self.view 
set background colour of self.view to gray 
remove self.view from the screen 

Это означает, что первые две строки бессмысленны, потому что все y ou do to the view уничтожается, когда вы удаляете его с экрана. И удаление представления - это странная вещь, которую нужно делать во время loadView - конечным результатом будет то, что после загрузки будет nil.

+0

Я делаю это. Итак, это единственный вид анимации, который можно применять для просмотра при использовании addSubview? – objlv

+0

Извините, я неправильно понял ваш код анимации - я думал, что вы делаете анимацию другого типа. Я обновил свой ответ. –

+0

См. Обновленный код TViewController.m. Я не заметил никаких изменений в анимации. – objlv

Смежные вопросы