2016-09-06 99 views
2

我參加了斯坦福大學提供的在線iOS課程。在示例代碼,是否需要將scrollview.delegate設置爲self?

@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 

是,它允許你添加代碼可以執行在開始滾動,滾動結束等你定製點來改變行爲或滾動型動作的方式。沒有那麼小的代碼,委託代碼將永遠不會被調用。

有意義嗎?

+0

背後的邏輯:用戶手勢 - >委託 - >滾動視圖縮放。這是對的嗎?爲什麼不用手勢 - >滾動視圖縮放? –

+0

爲什麼不使用scrollview包含這種方法?爲了靈活性?是否因爲如果我們包含所有內容,我們會讓scrollview過大? –

+0

對於縮放功能,我將其收回。有一個很好的答案丹 - http://stackoverflow.com/questions/3657451/how-to-enable-zoom-in-uiscrollview –

1

自我指的是什麼?

self是執行引用self的代碼的對象。在代碼片段中定義的scrollview實例變量是某個類的一部分;在這種情況下,它肯定是一個視圖控制器。一個物體和一個班級之間的區別就像桃餅和桃派之間的區別:配方是一個規範,告訴你所有關於桃餡餅,但你不能吃的食譜,而一個真正的桃派是一個獨特的東西,你可以從一個配方做出幾個類似的派。無論如何,self是執行與scrollview變量關聯的didSet方法的特定對象的名稱。

是否需要將scrollview.delegate設置爲self?爲什麼或者爲什麼不?

UIScrollView一個對象具有delegate屬性可以設置到它知道如何爲滾動視圖的代表,即實現了UIScrollViewDelegate協議的任何對象的任何對象。但是由於視圖幾乎總是由某種視圖控制器來管理的,因此管理滾動視圖的視圖控制器也會像代理一樣工作,這是非常典型的。滾動視圖將工作得很好,根本沒有委託;如果您想要響應滾動視圖中的更改來做某些事情,或者以某種方式修改其行爲,那麼設置委託只是非常重要的。所以,如果一個滾動視圖有一個委託,它通常是管理該滾動視圖的視圖控制器,因爲它也可能是視圖控制器,它首先設置滾動視圖self(意思是視圖控制器)大部分時間都會看到。

+0

我喜歡你的比喻。在「一個對象和一個類的區別」中,你的意思是「一個實例和一個類」? –

+0

準確地說 - 一個對象是一個類的一個實例。我花了一些麻煩來解釋它,因爲初學者有時沒有看到有什麼不同,並且很難傳達出「self」是指特定的實例。 – Caleb

相關問題