2017-01-30 5 views
0

У меня есть анимация, которая программно перемещает три кнопки вверх по экрану. Однако, когда я тестирую его на симуляторе для iPhone 6 или 4, положение кнопок все неправильно (но они только на iPhone 5). Как это исправить. Кнопки создаются программно, поэтому я не могу использовать автоматический макет для размещения их на контроллере представления.Как реализовать автоматический макет с анимацией кнопок

-(IBAction)Search:(id)sender { 

self.button.frame = CGRectMake(124, 475, 78, 72); 

self.buttonTwo.frame = CGRectMake(124, 475, 78, 76); 

self.buttonThree.frame = CGRectMake(124, 475, 78, 76); 

// animate 
[UIView animateWithDuration:0.75 animations:^{ 
    self.button.frame = CGRectMake(13, 403, 78, 72); 
    self.buttonTwo.frame = CGRectMake(124, 347, 78, 76); 
    self.buttonThree.frame = CGRectMake(232, 403, 78, 76); 
+0

Почему вы не можете использовать автозапуск? Вы все равно можете позиционировать их, даже если их программно создали. может создать экземпляр NSLayoutConstraints. – Joshua

ответ

0

Вы используете фиксированные значения для фреймов, но экраны имеют разную ширину и/или высоту.

Если они правильны для iPhone 5-5s (также известный как iPhone 4"), то один из способов справиться с этим является:

-(IBAction)Search:(id)sender { 

CGFloat screenWidth = self.view.bounds.size.width; 
CGFloat screenHeight = self.view.bounds.size.height; 

CGFloat normalizedX = (124/320) // You calculate these 'normalized' numbers, possibly from a designer's spec. 
            // it's the percent the amount should be over, as number from 0-1. 
            // This number is based on screen width of 320 having x 124 pt. 

CGFloat startingX = normalizedX * screenWidth; 
CGFloat startingY = (475/588) * screenHeight; 
CGFloat width = (78/320) * screenWidth; 
CGFloat height = (72/588) * screenHeight; 

CGRect startingRect = CGRectMake(startingX, startingY, width, height) 

self.button.frame = startingRect; 
self.buttonTwo.frame = startingRect; 
self.buttonThree.frame = startingRect; 

// animate 
[UIView animateWithDuration:0.75 animations:^{ 
    CGFloat firstX = (13/320) * screenWidth; 
    CGFloat lowerY = (403/588) * screenHeight; 
    self.button.frame = CGRectMake(firstX, lowerY, width, height); 

    CGFloat secondX = (124/320) * screenWidth; 
    CGFloat upperY = (347/588) * screenHeight; 
    self.buttonTwo.frame = CGRectMake(secondX, upperY, width, height); 

    CGFloat thirdX = (233/320) * ScreenWidth; 
    self.buttonThree.frame = CGRectMake(thirdX, lowerY, width, height); 
}]; 
} 

Это будет масштабировать размер все вверх и держать относительные позиции. Примечание. UIButtons будет иметь одинаковый размер текста. Вы можете играть с этими числами до тех пор, пока не получите нужный эффект. Надеюсь, это поможет!

+0

Мне это нужно в Objective-C. Спасибо! – Elizabeth429

+0

Это тот же код, только незначительный синтаксис чанг эс. Готово. –

Смежные вопросы