2016-10-06 1 views
0

J'ai une sous-classe UIView qui est créée par programmation. J'ai le mode portrait et paysage dans mon application qui utilise Autolayout. Initialement, le cadre UIView est défini à l'aide de initWithFrame.But lorsque l'orientation devient paysage, le CGRect de UIView est bloqué avec le mode portrait. Comment puis-je alerter la sous-classe UIView pour changer l'orientation CGRect sur l'appareil?Comment modifier le cadre d'une sous-classe UIView sur l'orientation du périphérique qui est créée par programme?

Quelqu'un peut-il m'aider?

Ceci est mon code de configuration de trame initiale pour le UIView:

- (id)initWithFrame:(CGRect)frame videoUrl:(NSURL *)videoUrl{ 

self = [super initWithFrame:frame]; 

if (self) { 
    _frame_width = frame.size.width; 

    int thumbWidth = ceil(frame.size.width*0.05); 

    _bgView = [[UIControl alloc] initWithFrame:CGRectMake(thumbWidth-BG_VIEW_BORDERS_SIZE, 0, frame.size.width-(thumbWidth*2)+BG_VIEW_BORDERS_SIZE*2, frame.size.height)]; 
    _bgView.layer.borderColor = [UIColor grayColor].CGColor; 
    _bgView.layer.borderWidth = BG_VIEW_BORDERS_SIZE; 
    [self addSubview:_bgView]; 
+0

vous devez changer le cadre taille de la vue lorsque l'application change d'orientation, non? – vaibhav

+0

@vaibhav oui.Je dois changer le CGRect UIView. –

+0

check my ans if suits – vaibhav

Répondre

0

ne détecte que l'orientation du dispositif que ce soit en mode landscape ou portrait puis modifier la taille de UIView en conséquence voir ci-dessous le code:

Pour détecter l'orientation de l'appareil:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation ]== UIDeviceOrientationLandscapeRight) 
    { 
     UIView *view = [classObject setupView:xPos yPos:yPos width:widthValue height:heightValue]; 
     yourView.frame = view.frame; 
     NSLog(@"device orientation Landscapse"); 
    } 
    if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) 
    { 
     UIView *view = [classObject setupView:xPos yPos:yPos width:widthValue height:heightValue]; 
     yourView.frame = view.frame; 
     NSLog(@"device orientation portrait"); 
    } 
} 

Écrivez cette méthode à l'intérieur de votre classe, pas besoin d'appeler de n'importe où pour détecter l'orientation lorsque l'utilisateur tourne.

Créer méthode personnalisée dans votre classe qui revient UIView avec cadre complet et appel en envoyant position x, y et sa largeur et sa hauteur lorsque l'utilisateur orientation change voir ci-dessous le code:

-(UIView *) setupView:(float)x yPos:(float)y width:(float)width height:(float) height{ 

    UIView *yourView = [[UIView alloc] initWithFrame:CGRectMake(x,y,width,height)]; 
    yourView.backgroundColor=[UIColor clearColor]; 
    return yourView; 
} 
+0

J'ajoute cette sous-classe UIView comme sous-vue à mon viewcontroller où je détecte le changement d'orientation. Le problème est que je dois envoyer un trigger à la sous-classe UIView pour changer la taille du cadre. Initialement le cadre UIView est configuré pour le portrait seulement, mais quand il s'agit de paysage le cadre ne change pas. J'ai besoin d'un moyen d'envoyer un déclencheur à la méthode de délégué de UIView sur l'orientation de l'appareil. –

+0

existe-t-il une méthode que vous avez créée pour définir et créer la vue dans votre classe? pouvez-vous s'il vous plaît montrer ce code de classe .. – vaibhav

+0

"[self.view addSubview: _videoRangeSlider];" Je l'ai ajouté comme ceci. J'ai une sous-classe UIView séparée où le CGRect doit être changé et un ViewController séparé où le UIView est ajouté comme subview. Je dois déclencher l'orientation de ViewController à la sous-classe UIView. –