2016-09-12 15 views
1

私は一般的にプログラミングやプログラミングの面で新しいです。私は、風景からプロットに、そしてその逆に向きを変えなければならないプロジェクトに取り組んでいます。たびに、私は、このようなNSLayoutconstraint、フォントサイズなど、さまざまな変数の値を変更する必要が姿勢変更が...私は異なるクラスの関数を使用するためのベストプラクティス

func updateValuesForAppropriateOrientations() 
{ 

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

{ 

すべてが正常に動作しているが、私はたくさんの中でこの機能を使用しています機能でこの変更を書きました毎回それを書き直しています。それを行うには正しい方法ですか、私は他の何かを継承する方法ですか?しかし、変数はすべてのViewControllerで異なっているので、どのように継承が助けになるかわかりません。ベストプラクティスは何ですか?私のコードをきれいにする方法は私の質問です。

答えて

1

私たちが今これを行うことを奨励する方法は、viewWillTransitionToSize:withTransitionCoordinator:メソッドを使用することです。これは、すべてのUIViewControllerが準拠するUIContentContainerプロトコルの一部です。画面の向きについて考えるのではなく、ルートビューのサイズが変更されるたびにアクションを実行するようにView Controllerに指示する必要があります。プロジェクト内のすべてのView Controllerに対して関数を書き直す必要があるという点では、viewControllerに関係する可能性のある変更に対してviewWillTransitionToSizeが自動的に呼び出されるため、これは要件に余裕があります。希望が役立ちます。あなたはすべての変数が同じ名前を持つように作る場合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 
関連する問題