/ / Замяна на стандартната анимация на UIViewController при завъртане на устройството - object-c, cocoa-touch, анимация, uiviewcontroller, uideviceorientation

Премахване на анимацията по подразбиране на UIViewController на ротация на устройството - цел-c, какао-докосване, анимация, uiviewcontroller, uideviceorientation

Искам да предоставя персонализирана анимация, когато устройството се върти, като изцяло отменя стандартната. Какъв е най-добрият начин за постигане на това?

BTW, видът на анимацията, който планирам, е:

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

б) Когато устройството се върне към портрет, този изглед трябва да се плъзне надолу и да изчезне.

Отговори:

1 за отговор № 1

Най-доброто е субективно и зависи от вашето приложение като цяло.

Един доста прав начин за справяне сротационните събития указват на системата да не ги обработва и да ги обработва сами. За вашия желан ефект от това, което по същество е равно на плъзгането на (предварително завъртян) изглед от страната, когато устройството е завъртяно настрани, това би изглеждало подходящо.

Ето един много основен пример за това как да се постигне такъв ефект.

@implementation B_VCRot_ViewController // defined in .h as @interface B_VCRot_ViewController : UIViewController
@synthesize sideways; // defined in .h as @property (strong, nonatomic) IBOutlet UIView *sideways;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
-(void)orientationChange:(NSNotification *)note{
UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation];
CGSize sidewaysSize = self.sideways.frame.size;
if (newOrientation == UIDeviceOrientationLandscapeLeft){
[UIView animateWithDuration:1.0 animations:^{
self.sideways.frame = CGRectMake(0, 0, sidewaysSize.width, sidewaysSize.height);
}];
}
else {
[UIView animateWithDuration:1.0 animations:^{
self.sideways.frame = CGRectMake(self.view.bounds.size.width, 0, sidewaysSize.width, sidewaysSize.height);
}];
}
}
- (void)viewDidLoad{
[super viewDidLoad];
[self.view addSubview:sideways];
self.sideways.transform = CGAffineTransformMakeRotation(M_PI_2); // Rotates the "sideways" view 90deg to the right.
CGSize sidewaysSize = self.sideways.frame.size;
// Move "sideways" offscreen to the right to be animated in on rotation.
self.sideways.frame = CGRectMake(self.view.bounds.size.width, 0, sidewaysSize.width, sidewaysSize.height);
// register for rotation notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
// Do any additional setup after loading the view, typically from a nib.
}
@end

Това, което направих тук, се добавя a UIView с пейзажна ориентация в .xib и е свързан с IBOutlet на име sideways, в viewDidLoad Добавям го като подраздел, го завъртях предварително и го премествах извън екрана. Също така добавям себе си като наблюдател за известията за завъртане на устройството (не забравяйте да се премахнете по-късно за това известие). И в shouldAutoRo.. Посочвам, че този VC работи само с портрет.

Когато устройството се върти NSNotificationCenter повиквания orientationChange:, В този момент, ако устройството се завърти наляво, моята sideways изгледът ще се плъзне отдясно (което изглежда сякаш се плъзга надолу).

Очевидно и за двете ландшафтни ориентации кодът ще бъде по-сложен. Също така вероятно ще трябва да се забъркваш с времето на анимацията, за да се почувстваш сякаш вторият изглед е "падащ"