我目前正在努力学习UIScrollView
. 作为一个练习,我只想要UIView
带有显示文本的标签的 s,并且我希望这些视图包含在 s 中UIScrollView
。为此,我有两个mutableArray
s;一个将包含文本,另一个将包含UIView
s。下面是初始化这些数组的方法。
- (NSMutableArray *)postViewsArray
{
if (_postViewsArray == nil) _postViewsArray = [[NSMutableArray alloc] init];
return _postViewsArray;
}
- (NSMutableArray *)postsArray
{
if (_postsArray == nil) _postsArray = [[NSMutableArray alloc] init];
return _postsArray;
}
接下来,我用值填充这两个数组。对于postsArray
我只放置静态文本。但是对于postViewsArray
我用作NSNull
占位符。这是为了优化目的,尤其是内存管理,当我将来需要加载带有图像的视图时。下面是设置这些数组的方法。
- (void) setupPostsArray {
[self.postsArray addObject:@"Hello"];
[self.postsArray addObject:@"You are doing good"];
[self.postsArray addObject:@"By this exercise"];
[self.postsArray addObject:@"In scroll views, paging enabled :)"];
}
- (void) setupPostViewsArray {
for (int i = 0; i < [self.postsArray count]; i++) {
[self.postViewsArray addObject:[NSNull null]];
}
}
在那里,很简单。现在让我们进入更具挑战性的部分。因此,在loadMyPages
方法中,首先我初始化 my scrollView
,设置它contentSize
,并将其添加为我的顶级视图的子视图,即self.view
. 在这里,我还在创建可以滑动浏览的“页面”时进行迭代,它是内容、背景颜色。它在那里。
但是,当我运行该应用程序时,我只能看到一个view
可以刷卡的。似乎还有 3 个views
可以容纳在这个滚动视图中。我做了NSLog
s 来检查page
正在创建的 ssubviews
并且它似乎工作正常,因为我在调试区域中看到了日志。请注意,view
我可以看到的 具有 my 的最后一个值postArray
。有朋友怀疑其他view
s 是重叠的,而不是并排查看。
在这里给我一些启发:)下面是我的loadMyPages
方法,如果你们准备好迎接挑战,也许可以看看这个。
- (void) loadMyPages
{
NSLog(@"loads view");
CGRect pagingScrollViewFrame = [[UIScreen mainScreen] bounds];
self.pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame];
self.pagingScrollView.contentSize = CGSizeMake(pagingScrollViewFrame.size.width * [self.postsArray count], pagingScrollViewFrame.size.height);
[self.view addSubview:self.pagingScrollView];
// iteration to enumerate creating of UIViews
for (int i = 0; i < [self.postsArray count]; i++) {
NSLog(@"Creating views?");
UIView *pageView = [self.postViewsArray objectAtIndex:i];
if ((NSNull *) pageView == [NSNull null]) {
// create a new UIView
UIView *page = [[UIView alloc] initWithFrame:self.view.bounds];
page.backgroundColor = [UIColor lightGrayColor];
// set text label
self.postLabel.text = [self.postsArray objectAtIndex:i];
// add the label to the created UIView
[page addSubview:self.postLabel];
// then lastly, add each element of the postViewsArray as a subview of the pagingScrollView
[self.postViewsArray replaceObjectAtIndex:i withObject:page];
[self.pagingScrollView addSubview:[self.postViewsArray objectAtIndex:i]];
NSLog(@"this view %@ has this post value: %@", page, [page subviews]);
NSLog(@"subviews of scrollview: %@", [self.pagingScrollView subviews]);
}
}
}