2016-09-12 5 views
1

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

func updateValuesForAppropriateOrientations() 
{ 

    if ipadPortrait() 
    { 
    //update variables for ipad portrait 
    } 
    else if ipadLandscape() 
    { 
    //update variables for ipad landscape 
    } 

{ 

все работает нормально, но я использую эту функцию в много различных ViewControllers, и я переписываю их каждый раз. Правильно ли это сделать, или я должен использовать наследование r что-то еще? Но переменные разные в каждом ViewController, поэтому я не вижу, как бы наследование помогло. Какова наилучшая практика и как я могу сделать мой код чище, это мой вопрос.

ответ

1

Я думаю, что нам рекомендуется сделать это сейчас, чтобы использовать viewWillTransitionToSize: withTransitionCoordinator: method. Это часть протокола UIContentContainer, к которому присоединяются все UIViewControllers. Вместо того, чтобы думать о ориентациях экрана, идея заключается в том, что вы должны указывать контроллерам вашего представления, чтобы они предпринимали действия, когда их размер корневого представления установлен на изменение. К вашему моменту переписать вашу функцию для каждого контроллера представления в вашем проекте, это избыточно для требований, поскольку viewWillTransitionToSize автоматически вызывается при любых изменениях, которые могут иметь отношение к viewController. Надеюсь, это поможет.

Подробности на https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIContentContainer_Ref/

0

Если вы сделаете все переменные имеют одинаковые имена, то вы можете вводить общую функциональность через реализацию протокола по умолчанию.

Пример:

protocol Rotatable { 
    var height: Int { get set } 
    var width: Int { get set } 
    mutating func rotate() 
} 

extension Rotatable { 
    mutating func rotate() { 
     let temp = height 
     height = width 
     width = temp 
    } 
} 

class Foo { 
    var height = 1 
    var width = 2 
} 

struct Bar { 
    var height = 10 
    var width = 20 
} 

extension Foo: Rotatable { } 
extension Bar: Rotatable { } 

var foo = Foo() 
var bar = Bar() 

print("Foo is \(foo.height)x\(foo.width)") // Foo is 1x2 
print("Bar is \(bar.height)x\(bar.width)") // Bar is 10x20 

foo.rotate() 
bar.rotate() 

print("Foo is \(foo.height)x\(foo.width)") // Foo is 2x1 
print("Bar is \(bar.height)x\(bar.width)") // Bar is 20x10 
Смежные вопросы