2016-07-19 5 views
3

Hallo, ich habe Probleme, Farbverlauf auf meine UIView anwenden. Es ist korrekt angewendet, aber die Farbe Grenzen variiert mit horizontalen & Hochformat.Wie erhalten Sie korrekte Größe oder Grenzen von UIView in Swift 2.0?

Wenn ich die Ausrichtung "Hochformat" richtig eingestellt habe, werden die Grenzen der Verlaufsansicht nicht geändert, wenn ich das Gerät horizontal decke.

So, wie die richtigen Einschränkungen und die Größe der UIView für horizontale und Hochformatausrichtung erhalten.

Vielen Dank für Ihre Hilfe !!!

-Code Ich habe versucht:

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.redColor().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() 

    } 


} 

Codierung Ausgabe:

enter image description here

Antwort

6

In viewDidLoad das Layout noch nicht geschehen ist, so dass Sie den falschen Frame bekam, verschieben die gradient.frame.size = self.viewBar.bounds.size entweder viewDidLayoutSubviews: oder viewWillAppear: so dass Ihre gradient erhält den richtigen Rahmen.

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

nicht funktioniert .. gleiche Ausgabe ist gekommen ... ich versuche diese Methode auch ... 'gradient.frame = viewBar.frame' und 'gradient.frame = CGRect (x: 0, y: 0, Breite : viewBar.frame.width, height: viewBar.frame.height) ' thankz für deine Hilfe Mann .. :) :): D –

+0

Sie können versuchen,' self.view.setNeedLayout() 'und' self.view aufzurufen .layoutIfNeeded() 'nach' super.viewDidLoad() 'und versuchen Sie es erneut – Tj3n

+0

thankz man Ihren Code funktioniert sehr gut ... wenn ** DISABLING DIE GRÖSSENKLASSEN ** Vielen Dank :) glücklich hier !! : D –

2

Überprüfen Sie Ihre Geräteausrichtung in viewDidLayoutSubViews mit dieser Methode.

+(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; 
} 

Dann in viewDidLayoutSubviews Aufruf dieser Funktion wie diese,

-(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); 
} 
..... 

} 

Denken Sie auch daran, diese Konstanten in einer beliebigen Datei zu setzen, wollen Sie.

#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)) 

Ich bin nicht vertraut mit Swift-Code, aber hoffe, es wird Ihnen helfen.

+0

Diese Frage ist verschlagwortet mit "swift". Ihre Lösung hat möglicherweise einen Wert, ist aber nicht in der von OP angeforderten Sprache verfasst. Bitte geben Sie eine Antwort in Swift. Vielen Dank. – Moritz

+1

Ich wusste, ich bin nicht vertraut mit swift. Ich wollte nur erklären, wie es geht. Eine Person, die mit swift und Objective C gearbeitet hat, ist für sie sehr einfach zu verstehen. – WasimSafdar

+1

@ WasimSafdar, wow großer Mann ... ich werde das in swift tun ..thankzz lot :) –