2016-10-06 7 views
0

У меня есть подкласс UIView, который создается программным способом. У меня есть портретный и ландшафтный режим в моем приложении, которое использует Autolayout. Первоначально рама UIView устанавливается с использованием initWithFrame. Но когда ориентация меняется на пейзаж, CGRect UIView застрял в режиме портретной работы. Как я могу предупредить подкласс UIView, чтобы изменить CGRect на ориентацию устройства?Как изменить кадр подкласса UIView на ориентацию устройства, который программно создан?

Может ли кто-нибудь помочь мне в этом?

Это мой исходный код установки рамки для 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

вам нужно изменить рамку размер представления, когда приложение меняет свою ориентацию, не так ли? – vaibhav

+0

@vaibhav yes. Мне нужно изменить UIView CGRect. –

+0

проверить мои ans if suits .. – vaibhav

ответ

0

Просто обнаружить ориентацию устройства, будь то в landscape или portrait режиме, а затем изменить размер UIView соответственно см ниже код:

Для обнаружения ориентации устройства:

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

Запишите этот метод внутри своего класса, без необходимости звонить из любой точки, где он будет определять ориентацию при повороте пользователя.

Создать пользовательский метод внутри вашего класса, который возвращается UIView с полной рамой и вызвать, отправив х, у позиции и его ширину и высоту, когда пользователь меняет ориентацию см ниже код:

-(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

Я добавляю этот подкласс UIView в качестве подзаголовка в мой диспетчер представлений, где я обнаруживаю изменение ориентации. Проблема в том, что мне нужно отправить триггер в подкласс UIView, чтобы изменить размер кадра при изменении ориентации. Первоначально кадр UIView настраивается только для портрета, но когда дело доходит до пейзажа, кадр не изменяется. Мне нужен выход, чтобы отправить триггер методу делегата UIView на ориентацию устройства. –

+0

Есть ли какой-либо метод, который вы создали для создания и создания представления внутри вашего класса? можете ли вы показать, что код класса .. – vaibhav

+0

"[self.view addSubview: _videoRangeSlider];" Я добавил его вот так. У меня есть отдельный подкласс UIView, где CGRect необходимо изменить и отдельный ViewController, где UIView добавлен как subview. Мне нужно вызвать ориентацию из ViewController в подкласс UIView. –