混淆了一个简单的分页和平移示例。 OBJ-C

时间:2013-03-14 20:48:37

标签: ios objective-c

研究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屏幕的视图实例。

  1. 首先,我们声明了一个具有“窗口”范围的新变量“screenRect”。

  2. 然后我们创建一个“UIScrollView”实例,其框架尺寸与 “screenRect”与窗口相同。

  3. 启用分页功能。

  4. 将新创建的“scrollView”添加到视图层次结构中。 所以我们有父“窗口”和子“scrollView”(与我们的主窗口具有相同的尺寸)

  5. 声明一个新变量“bigRect”,并使其等于我们之前声明的“screenRect”。

  6. 将bigRect的“width”属性设置为两倍。

  7. 创建一个新的“view”对象,它是我们定制的Hypnosis类的一个实例,它实际执行绘图。我们将视图的框架设置为与“screenRect”框架相同。

  8. 将新创建的“视图”添加到视图层次结构中。现在我们有3级层次结构:UIWindow - > UIScrollView - > HypnosysView

  9. 9.现在,我不明白这行代码的作用以及我们为什么需要它(screenRect.origin.x = screenRect.size.width;)

    10)。为什么我们要在下一行创建另一个HypnosisView实例?

    11)。最后,我们通知scrollView它的大小有多大。

1 个答案:

答案 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

这只是将第二个催眠视图定位在第一个催眠视图右侧。