ios8 - tamaño - teclado iphone descargar
¿Cómo detectar el cambio de orientación en la extensión de teclado personalizado en iOS 8? (9)
Antes de iOS 8.3, debes usar
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
Este no funciona (debe ser un error):
-(void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
En iOS 8.3 y posterior, será mejor que uses
-(void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
porque
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
es obsoleto.
En Custom Keyboard Extension, no podemos usar
`didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation`
y la aplicación sharedApplication
.
Necesito detectar el retrato o el paisaje en el teclado cuando gire.
¿Cómo puedo detectar cuándo cambia la orientación en la extensión Teclado personalizado?
En algunos casos, la [pantalla principal de UIScreen] puede no funcionar. Algunas veces se actualizará después de viewWillTransitionToSize:
Prueba esto
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
CGFloat realScreenHeight = MAX(screenSize.height, screenSize.width);
if(size.width == realScreenHeight)
NSLog(@"Landscape");
else
NSLog(@"Portrait");
}
Hay una manera simple, solo mirando el ancho de la pantalla:
double width = [[UIScreen mainScreen] bounds].size.width;
double interfaceWidth = MIN([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height);
BOOL isPortrait = (width == interfaceWidth) ? YES : NO;
No está en desuso y funcionará en el tamaño de pantalla de cualquier dispositivo (incluidos los tamaños de pantalla futuros que macrumors.com/roundup/iphone-6 ).
En CustomKeyboard ViewController.m
:
-(void)viewDidLayoutSubviews {
NSLog(@"%@", (self.view.frame.size.width == ([[UIScreen mainScreen] bounds].size.width*([[UIScreen mainScreen] bounds].size.width<[[UIScreen mainScreen] bounds].size.height))+([[UIScreen mainScreen] bounds].size.height*([[UIScreen mainScreen] bounds].size.width>[[UIScreen mainScreen] bounds].size.height))) ? @"Portrait" : @"Landscape");
}
hecho.
O..................
Para una versión más fácil de leer de este código:
-(void)viewDidLayoutSubviews {
int appExtensionWidth = (int)round(self.view.frame.size.width);
int possibleScreenWidthValue1 = (int)round([[UIScreen mainScreen] bounds].size.width);
int possibleScreenWidthValue2 = (int)round([[UIScreen mainScreen] bounds].size.height);
int screenWidthValue;
if (possibleScreenWidthValue1 < possibleScreenWidthValue2) {
screenWidthValue = possibleScreenWidthValue1;
} else {
screenWidthValue = possibleScreenWidthValue2;
}
if (appExtensionWidth == screenWidthValue) {
NSLog(@"portrait");
} else {
NSLog(@"landscape");
}
}
Para actualizar su teclado personalizado cuando la orientación cambia, anule viewDidLayoutSubviews
en el UIInputViewController
. Por lo que puedo decir, cuando ocurre una rotación este método siempre se llama.
Además, como la aplicación [UIApplication sharedApplication] statusBarOrientation]
no funciona, para determinar la orientación actual use el siguiente fragmento de código:
if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
//Keyboard is in Portrait
}
else{
//Keyboard is in Landscape
}
¡Espero que esto ayude!
use viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:
dentro de su viewController
willRotateToInterfaceOrientation
y didRotateFromInterfaceOrientation
se pueden utilizar, acabo de probar esto en mi iPad con un teclado en iOS 8.1. Tenga en cuenta que estos están en desuso en iOS 8, pero su reemplazo, willTransitionToTraitCollection
, no se llama, aunque es probable porque la colección de características no cambia para el teclado en el momento de la rotación.
- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
{ UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; // do whatever
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { }]; [super viewWillTransitionToSize: size withTransitionCoordinator: coordinator];
}
- (void)updateViewConstraints {
[super updateViewConstraints];
// Add custom view sizing constraints here
if (self.view.frame.size.width == 0 || self.view.frame.size.height == 0)
return;
[self.inputView removeConstraint:self.heightConstraint];
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
CGFloat screenH = screenSize.height;
CGFloat screenW = screenSize.width;
BOOL isLandscape = !(self.view.frame.size.width ==
(screenW*(screenW<screenH))+(screenH*(screenW>screenH)));
NSLog(isLandscape ? @"Screen: Landscape" : @"Screen: Potriaint");
self.isLandscape = isLandscape;
if (isLandscape) {
self.heightConstraint.constant = self.landscapeHeight;
[self.inputView addConstraint:self.heightConstraint];
} else {
self.heightConstraint.constant = self.portraitHeight;
[self.inputView addConstraint:self.heightConstraint];
}
//trigger default first view
[btn_gif sendActionsForControlEvents: UIControlEventTouchUpInside];
}