¿Cómo get el tamaño o los límites correctos de UIView en Swift 2.0?

Hola, estoy teniendo problemas para aplicar el color del gradiente a mi UIView . Se aplica correctamente , pero los límites de color varían según la orientación horizontal y vertical.

si configuro correctamente la orientación vertical, los límites de la vista de gradiente no se modifican cuando giro el dispositivo horizontalmente.

Entonces, ¿Cómo get las restricciones y el tamaño correctos de UIView para la UIView horizontal y vertical del dispositivo ?.

¡¡¡Muchas gracias por tu ayuda!!!

Código que he intentado:

 import UIKit class ViewController: UIViewController { @IBOutlet var viewBar: UIView! override func viewDidLoad() { super.viewDidLoad() viewBar.layer.shadowOpacity = 0.5 viewBar.layer.shadowOffset = CGSize(width: 3.0, height:2.0) viewBar.layer.shadowRadius = 5.0 viewBar.layer.shadowColor = UIColor.blueColor().CGColor let gradient: CAGradientLayer = CAGradientLayer() gradient.colors = [UIColor.blueColor().CGColor, UIColor.networkingColor().CGColor] gradient.locations = [0.0 , 1.0] gradient.startPoint = CGPoint(x: 0.0, y: 1.0) gradient.endPoint = CGPoint(x: 1.0, y: 1.0) gradient.frame.size = self.viewBar.bounds.size self.viewBar.layer.insertSublayer(gradient, atIndex: 0) override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

Salida de encoding:

introduzca la descripción de la imagen aquí

En viewDidLoad el layout aún no ha sucedido, por lo que obtuvo el marco incorrecto, mueva gradient.frame.size = self.viewBar.bounds.size a viewDidLayoutSubviews: o viewWillAppear: para que su gradient obtenga el marco correcto.

  override func viewDidLayoutSubviews() { gradient.frame.size = self.viewBar.bounds.size } 

Verifique la orientación de su dispositivo en viewDidLayoutSubViews utilizando este método.

 +(NSString*)checkDeviceOrientation { NSString *deviceOrientation; if ([[UIDevice currentDevice]orientation]== UIInterfaceOrientationLandscapeLeft ) { deviceOrientation = @"landscape left mode"; } else if ([[UIDevice currentDevice]orientation]==UIInterfaceOrientationLandscapeRight){ deviceOrientation = @"landscape right mode"; } else{ deviceOrientation = @"potrait mode"; } return deviceOrientation; } 

Entonces en viewDidLayoutSubviews llama a esta function así,

 -(void)viewDidLayoutSubview { if(IS_PHONE4) if([self.checkDeviceOrientation isEqualtoString;@"landscape right mode"]) { NSLog(@"Get your view size%@",self.view.frame.size.width); } if(IS_IPHONE5) if([self.checkDeviceOrientation isEqualtoString;@"landscape right mode"]) { NSLog(@"Get your view size%@",self.view.frame.size.width); } ..... } 

Recuerde también poner estas constantes en cualquier file que desee.

 #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_IPHONE4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0f || IS_IPHONE && [[UIScreen mainScreen]bounds].size.width == 480.0f) #define IS_IPHONE5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f || IS_IPHONE && [[UIScreen mainScreen]bounds].size.width == 568.0f) #define IS_IPHONE6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0 || IS_IPHONE && [[UIScreen mainScreen]bounds].size.width == 667.0f) #define IS_IPHONE6PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0 || IS_IPHONE && [[UIScreen mainScreen]bounds].size.width == 736.0f) #define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0)) 

No estoy familiarizado con el código Swift pero espero, te ayudará.