Format-Table
не имеет ничего общего с тем, что я просто попробую сделать следующее в PowerSell V 4.0 и PowerShel V5.0, и проблема может быть воспроизведена:
Get-Process |Select-Object -Property name ; pause
арка поворота:
Get-Process |Select-Object -Property Name |%{Write-host $_.name};pause
Здесь снова выполняется пауза:
Get-Process |%{$_.name | Set-Content 'c:\temp\test.txt';$_} |Select-Object -Property Name ;pause
Но не здесь
Get-Process |%{$_.name | Set-Content 'c:\temp\test.txt';Start-Sleep -Milliseconds 1;$_} |Select-Object
-Property Name ;pause
Для меня в PowerShell V5.0 все работает, как если бы хост не нужен в инструкциях, которые конвейерны, тогда эти инструкции запускаются асинхронно.
Мне бы хотелось, чтобы люди, как @Keith Hill, смотрели на это поведение.
Это больше не проблема в более поздней версии iPhone 3.1.2 SDK. Теперь он, кажется, соблюдает запрошенную ориентацию представления, возвращаемого в стек. Это, вероятно, означает, что вам нужно будет обнаруживать более старые версии iPhone OS и применять setOrientation только тогда, когда он предшествует последнему выпуску.
Неясно, поймет ли статический анализ Apple, что вы работаете с ограничениями старых SDK. Мне лично Apple посоветовал удалить вызов метода при следующем обновлении, поэтому я еще не уверен, пройдет ли процесс утверждения взлома для старых устройств.
Это - то, что я использую. (Вы получаете некоторые предупреждения компиляции, но это работает и в Средстве моделирования и в iPhone)
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
Я не думаю, что это возможно сделать во времени выполнения, хотя Вы могли, конечно, просто применить преобразование на 90 градусов к своему UI.
При использовании UIViewControllers существует этот метод:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
Возврат NO
для контроллеров представления, содержащих представления, Вы не хотите вращаться.
Из того, что я могу сказать, setOrientation:
, метод не работает (или возможно не работает больше). Вот то, что я делаю, чтобы сделать это:
первый, помещает, это определяет наверху Вашего файла, прямо под Вашим #imports:
#define degreesToRadian(x) (M_PI * (x) / 180.0)
тогда, в viewWillAppear:
метод
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
, если Вы хотите, чтобы это было анимировано, тогда можно обернуть все это в блок анимации, как так:
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];
Затем в Вашем контроллере режима портрета, можно сделать реверс - проверка, чтобы видеть, если в настоящее время в среде, и если так, поверните его назад к Портрету.
Если вы хотите заставить его поворачиваться из портретной в ландшафтную форму, вот код. Просто отметьте, что вам нужно отрегулировать центр вашего обзора. Я заметил, что мой не поместил вид в правильном месте. В остальном все работало отлично. Спасибо за подсказку.
if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
self.view.center = CGPointMake(160.0f, 240.0f);
[UIView commitAnimations];
}
У меня была проблема, когда у меня был UIViewController
на экране, в UINavigationController
, в альбомной ориентации. Однако когда следующий контроллер представления вставляется в поток, мне нужно, чтобы устройство вернулось в книжную ориентацию.
Я заметил, что метод shouldAutorotateToInterfaceOrientation:
не вызывается, когда новый контроллер представления помещается в стек, но он вызывается, когда контроллер представления выгружается из стека.
Пользуясь этим, я использую этот фрагмент кода в одном из своих приложений:
- (void)selectHostingAtIndex:(int)hostingIndex {
self.transitioning = YES;
UIViewController *garbageController = [[[UIViewController alloc] init] autorelease];
[self.navigationController pushViewController:garbageController animated:NO];
[self.navigationController popViewControllerAnimated:NO];
BBHostingController *hostingController = [[BBHostingController alloc] init];
hostingController.hosting = [self.hostings objectAtIndex:hostingIndex];
[self.navigationController pushViewController:hostingController animated:YES];
[hostingController release];
self.transitioning = NO;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (self.transitioning)
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
else
return YES;
}
В принципе, создавая пустой контроллер представления, заталкивая его в стек и тут же сбрасывая, можно заставить интерфейс вернуться в портретное положение. После того, как контроллер был вытолкнут, я просто нажимаю на контроллер, который я намеревался вытолкнуть в первую очередь. Визуально это выглядит великолепно - пустой произвольный контроллер представления никогда не виден пользователю.