2016-09-06 100 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

相关问题