2016-09-06 16 views
2

私はStanfordが提供するオンラインiOSコースを受講しています。サンプルコードでは、scrollview.delegateを自己として設定する必要がありますか?

@IBOutlet weak var scrollView: UIScrollView! { 
    didSet { 
     scrollView.contentSize = imageView.frame.size 
     // all three of the next lines of code 
     // are necessary to make zooming work 
     scrollView.delegate = self 
     scrollView.minimumZoomScale = 0.03 
     scrollView.maximumZoomScale = 1.0 
    } 
} 

私はscrollView.delegate = selfを削除する場合は、このスクロールビューはまだシミュレータ上で動作します。

私の質問は:

  1. が自己としてscrollview.delegateを設定することが必要ですか?なぜ、なぜそうではないのですか?
  2. 自己参照とは何ですか?コマンド+左クリックは "設定しました"を探します。

答えて

3
  1. あなたはscrollViewのためのデリゲートを設定する必要はありません。 scrollViewが呼び出すデリゲートメソッドに反応する場合にのみ行います。たとえば、ユーザーがスクロールを実行するときに何かしたい場合は、代理人を設定してfunc scrollViewDidScroll(scrollView: UIScrollView)メソッドを実装する必要があります。ユーザーがスクロールするたびに、このメソッドの本体で反応することができます。

  2. Selfは、この変数を保持するクラスを指します。この場合はおそらくあなたのことでしょう。UIViewController

3

定義しても、それでも動作しますか?私はあなたがタッチでそれを動かすことができれば、うまくいくことを意味します。

scrollView.delegate = self 

の理由は、それはあなたがスクロールが始まった時に、スクロールなど、あなたが行動やscrollviewのアクションを変更するカスタマイズポイントを持ってそのように終了し、実行可能なコードを追加することができますということです。その小さなコードがなければ、デリゲートコードは決して呼び出されません。

意味がありますか?

+0

ロジックの背後にある:ユーザージェスチャー - >デリゲート - >スクロールビューズーム。それが正しいか?なぜユーザージェスチャー - >スクロールビューのズーム? –

+0

なぜ、scrollviewにはそのようなメソッドが含まれていますか?柔軟性のために?それはすべてを含めると、スクロールビューを大量にすることになるからですか? –

+0

ズーム機能については、取り返します。 Danによって素晴らしい答えがあります - http://stackoverflow.com/questions/3657451/how-to-enable-zoom-in-uiscrollview –

1

自己参照とは何ですか?

selfは、selfを参照するコードを実行しているオブジェクトです。コードスニペットで定義されたscrollviewインスタンス変数は、いくつかのクラスの一部です。この場合、それは必ずビューコントローラです。オブジェクトとクラスの違いは、桃のパイと桃のパイのレシピの違いです。レシピは桃のパイについての情報をすべて表示しますが、レシピは食べられませんが、実際の桃のパイ独特のものであり、あなたは単一のレシピからいくつかの同様のパイを作ることができます。とにかく、selfは、scrollview変数に関連付けられたdidSetメソッドを実行している特定のオブジェクトの名前です。

scrollview.delegateを自己として設定する必要がありますか?なぜ、なぜそうではないのですか?

UIScrollViewオブジェクトはdelegate性質を持っているあなたは、スクロールビューのデリゲート、UIScrollViewDelegateプロトコルを実装して、すなわち任意の対象となる方法を知っている任意のオブジェクトに設定することができます。しかし、ビューはほとんどの場合、ある種のビューコントローラで管理されているので、スクロールビューを管理するビューコントローラを代理人として動作させるのはかなり一般的です。スクロールビューはデリゲートなしでうまく動作します。デリゲートを設定することは、スクロールビューの変更に応じて何かをしたい場合や、何らかの形でその動作を変更する場合にのみ重要です。したがって、スクロールビューにデリゲートがある場合は、通常はそのスクロールビューを管理するビューコントローラであり、おそらく最初の場所にスクロールビューを設定するビューコントローラでもあります。self(ビューコントローラを意味します)ほとんどの時間がわかります。

+0

私はあなたのアナロジーが好きです。 「オブジェクトとクラスの違い」では、「インスタンスとクラス」を意味しますか? –

+0

厳密には、オブジェクトはクラスのインスタンスです。初心者は時には違いがあるとは思えないので、私はそれを説明するのが面倒でした。そして、「自己」は特定のインスタンスを指していると伝えるのは難しいかもしれません。 – Caleb

関連する問題