研究iOs发展 - 大书呆子牧场指南“(Conway和Hillegass)
第章“对UIView和UIScrollView进行子类化”;平移和寻呼。
下面输入了以下代码块
- (BOOL)application:didFinishLaunchingWithOptions:method。
(HypnosisView - 是一个自定义的类,它实际上在屏幕上执行绘图。)
无法理解以下代码:
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//-------Adding a scrool option-----------
CGRect screenRect=[[self window] bounds];
// create the UIScrollView to have the size of the window, matching its size
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:screenRect];
[scrollView setPagingEnabled:YES];
[[self window] addSubview:scrollView];
// create the HypnosisView with a frame that is twice the size of the screen (with a big
// width)
CGRect bigRect = screenRect;
bigRect.size.width *=2.0;
HypnosisView *view=[[HypnosisView alloc] initWithFrame:screenRect];
// add the HypnosisView as a subview of the scrollView istead of the window
[scrollView addSubview:view];
// move the ractangle for the other HypnosisView to the right, just off the screen
screenRect.origin.x = screenRect.size.width;
HypnosisView *anotherView = [[HypnosisView alloc] initWithFrame:screenRect];
[scrollView addSubview:anotherView];
// tell the scrollView how big its virtual world is
[scrollView setContentSize:bigRect.size];
所以我们的目标是创建一个宽度大于iphone屏幕的视图实例。
首先,我们声明了一个具有“窗口”范围的新变量“screenRect”。
然后我们创建一个“UIScrollView”实例,其框架尺寸与 “screenRect”与窗口相同。
启用分页功能。
将新创建的“scrollView”添加到视图层次结构中。 所以我们有父“窗口”和子“scrollView”(与我们的主窗口具有相同的尺寸)
声明一个新变量“bigRect”,并使其等于我们之前声明的“screenRect”。
将bigRect的“width”属性设置为两倍。
创建一个新的“view”对象,它是我们定制的Hypnosis类的一个实例,它实际执行绘图。我们将视图的框架设置为与“screenRect”框架相同。
将新创建的“视图”添加到视图层次结构中。现在我们有3级层次结构:UIWindow - > UIScrollView - > HypnosysView
9.现在,我不明白这行代码的作用以及我们为什么需要它(screenRect.origin.x = screenRect.size.width;)
10)。为什么我们要在下一行创建另一个HypnosisView实例?
11)。最后,我们通知scrollView它的大小有多大。
答案 0 :(得分:1)
9.Now here, I don't understand what this line of code does and why do we need it (screenRect.origin.x = screenRect.size.width;)
10). Why are we creating another instance of HypnosisView in the next line?
该示例将在滚动视图中显示2个并排的HypnosisViews。第二个是屏幕外。因此,您必须拖动/分页滚动视图才能看到它。
screenRect.origin.x = screenRect.size.width
这只是将第二个催眠视图定位在第一个催眠视图右侧。