Искам да предоставя персонализирана анимация, когато устройството се върти, като изцяло отменя стандартната. Какъв е най-добрият начин за постигане на това?
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
изгледът ще се плъзне отдясно (което изглежда сякаш се плъзга надолу).
Очевидно и за двете ландшафтни ориентации кодът ще бъде по-сложен. Също така вероятно ще трябва да се забъркваш с времето на анимацията, за да се почувстваш сякаш вторият изглед е "падащ"