请大侠指教uiviewcontroller中添加了scrollview来实现多屏显示的的问题
2012-03-06 17:08
295 查看
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClick)];
self.navigationItem.leftBarButtonItem = leftButton;
[leftButton release];
isFreshInitSelf = TRUE;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
scrollPagesCount = 4;
}
else
{
scrollPagesCount = 7;
}
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
scrollView.backgroundColor = [UIColor clearColor];
self.view.backgroundColor = [UIColor clearColor];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
leftTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, LEFTMENU_VIEW_WIDTH, CGRectGetHeight(self.view.bounds))];
leftTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
leftTableView.backgroundColor = [UIColor clearColor];
leftTableView.rowHeight = 120;
NSString *imageName = @"bg_left_menunav.png";
if (CGRectGetWidth(self.view.bounds) > 768) {
imageName = @"bg_left_menunav_landscape.png";
}
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, LEFTMENU_VIEW_WIDTH, CGRectGetHeight(self.view.bounds))];
imageView.image = [UIImage imageNamed:imageName];
imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
[leftTableView addSubview:imageView];
[imageView release];
[self.view addSubview:leftTableView];
}
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (isFreshInitSelf == TRUE) {
CGRect rect;
if (scrollPagesCount == 1) {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
rect = self.view.frame;
rect.origin.x += 200;
rect.size.width -= 200;
scrollView.frame=rect;
}
}
[self setupScheduleScrollPage];//分屏显示,不知是否有问题,请大侠指教~~
isFreshInitSelf = FALSE;
}else {
[self setScheduleScrollViewSubViewsLayoutForRotation];
}
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewDidUnload
{
[scrollView release];
[leftTableView release];
[rightTableView release];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return [[MiraclePushClientAppDelegate getApp] allowAutoScreen];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self setScheduleScrollViewSubViewsLayoutForRotation];
}
#pragma UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)_scrollView
{
if (pageControlIsChangingPage) {
return;
}
/*
* We switch page at 50% across
*/
CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
//由于最左侧去掉了一个200宽度的一个空间,scrollview只占用的568的宽度,可是此处的_scrollView.contentOffset.x 一直是768(实际是否为568)为什么
??
currentPageNum = page;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView
{
pageControlIsChangingPage = NO;
}
- (void) backButtonClick
{
[MiraclePushClientAppDelegate getApp].rootController.scheduleViewScroller = nil;
[[self navigationController] popViewControllerAnimated:YES];
//add 09-13
[[MiraclePushClientAppDelegate getApp].rootController.mainViewScrollerController sendReqToGetMenuInfoData];
}
//分屏显示以及设置scrollView有问题????
-(void)setupScheduleScrollPage
{
if (scrollView.delegate == nil) {
scrollView.delegate = self;
[scrollView setBackgroundColor:[UIColor clearColor]];
[scrollView setCanCancelContentTouches:NO];
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
CGFloat tableViewWidth = self.view.bounds.size.width - 200;
CGFloat tableViewHeight = self.view.bounds.size.height;
NSInteger cx = 200;
for (NSInteger i=0; i< scrollPagesCount ; i++) {
CGRect frame = CGRectMake(cx, 0, tableViewWidth, tableViewHeight);
UIView *tv = [[UIView alloc] initWithFrame:frame];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
NSString *str = [[NSString alloc] initWithFormat:@"View%d", i];
label.text = str;
[tv addSubview:label];
[label release];
[scrollView addSubview:tv];
[tv release];
tv = nil;
cx += frame.size.width;
}
scrollView.frame = self.view.frame;
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}
else
{
CGFloat tableViewWidth = self.view.bounds.size.width;
CGFloat tableViewHeight = self.view.bounds.size.height;
NSInteger cx = 0;
for (NSInteger i=0; i<scrollPagesCount ; i++) {
CGRect rect = CGRectMake(cx, 0, tableViewWidth, tableViewHeight);
UIView *tv = [[UIView alloc] initWithFrame:rect];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 100)];
NSString *str = [[NSString alloc] initWithFormat:@"View%d", i];
label.text = str;
[tv addSubview:label];
[label release];
[scrollView addSubview:tv];
[tv release];
tv = nil;
cx += rect.size.width;
}
scrollView.frame = self.view.frame;
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}
}
- (void)setScheduleScrollViewSubViewsLayoutForRotation {
for(UIView *subview in [scrollView subviews]) {
[subview removeFromSuperview];
}
[self setupScheduleScrollPage];
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * currentPageNum;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
}
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClick)];
self.navigationItem.leftBarButtonItem = leftButton;
[leftButton release];
isFreshInitSelf = TRUE;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
scrollPagesCount = 4;
}
else
{
scrollPagesCount = 7;
}
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
scrollView.backgroundColor = [UIColor clearColor];
self.view.backgroundColor = [UIColor clearColor];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
leftTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, LEFTMENU_VIEW_WIDTH, CGRectGetHeight(self.view.bounds))];
leftTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
leftTableView.backgroundColor = [UIColor clearColor];
leftTableView.rowHeight = 120;
NSString *imageName = @"bg_left_menunav.png";
if (CGRectGetWidth(self.view.bounds) > 768) {
imageName = @"bg_left_menunav_landscape.png";
}
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, LEFTMENU_VIEW_WIDTH, CGRectGetHeight(self.view.bounds))];
imageView.image = [UIImage imageNamed:imageName];
imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
[leftTableView addSubview:imageView];
[imageView release];
[self.view addSubview:leftTableView];
}
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (isFreshInitSelf == TRUE) {
CGRect rect;
if (scrollPagesCount == 1) {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
rect = self.view.frame;
rect.origin.x += 200;
rect.size.width -= 200;
scrollView.frame=rect;
}
}
[self setupScheduleScrollPage];//分屏显示,不知是否有问题,请大侠指教~~
isFreshInitSelf = FALSE;
}else {
[self setScheduleScrollViewSubViewsLayoutForRotation];
}
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewDidUnload
{
[scrollView release];
[leftTableView release];
[rightTableView release];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return [[MiraclePushClientAppDelegate getApp] allowAutoScreen];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self setScheduleScrollViewSubViewsLayoutForRotation];
}
#pragma UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)_scrollView
{
if (pageControlIsChangingPage) {
return;
}
/*
* We switch page at 50% across
*/
CGFloat pageWidth = _scrollView.frame.size.width;
int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
//由于最左侧去掉了一个200宽度的一个空间,scrollview只占用的568的宽度,可是此处的_scrollView.contentOffset.x 一直是768(实际是否为568)为什么
??
currentPageNum = page;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView
{
pageControlIsChangingPage = NO;
}
- (void) backButtonClick
{
[MiraclePushClientAppDelegate getApp].rootController.scheduleViewScroller = nil;
[[self navigationController] popViewControllerAnimated:YES];
//add 09-13
[[MiraclePushClientAppDelegate getApp].rootController.mainViewScrollerController sendReqToGetMenuInfoData];
}
//分屏显示以及设置scrollView有问题????
-(void)setupScheduleScrollPage
{
if (scrollView.delegate == nil) {
scrollView.delegate = self;
[scrollView setBackgroundColor:[UIColor clearColor]];
[scrollView setCanCancelContentTouches:NO];
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
CGFloat tableViewWidth = self.view.bounds.size.width - 200;
CGFloat tableViewHeight = self.view.bounds.size.height;
NSInteger cx = 200;
for (NSInteger i=0; i< scrollPagesCount ; i++) {
CGRect frame = CGRectMake(cx, 0, tableViewWidth, tableViewHeight);
UIView *tv = [[UIView alloc] initWithFrame:frame];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
NSString *str = [[NSString alloc] initWithFormat:@"View%d", i];
label.text = str;
[tv addSubview:label];
[label release];
[scrollView addSubview:tv];
[tv release];
tv = nil;
cx += frame.size.width;
}
scrollView.frame = self.view.frame;
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}
else
{
CGFloat tableViewWidth = self.view.bounds.size.width;
CGFloat tableViewHeight = self.view.bounds.size.height;
NSInteger cx = 0;
for (NSInteger i=0; i<scrollPagesCount ; i++) {
CGRect rect = CGRectMake(cx, 0, tableViewWidth, tableViewHeight);
UIView *tv = [[UIView alloc] initWithFrame:rect];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 100)];
NSString *str = [[NSString alloc] initWithFormat:@"View%d", i];
label.text = str;
[tv addSubview:label];
[label release];
[scrollView addSubview:tv];
[tv release];
tv = nil;
cx += rect.size.width;
}
scrollView.frame = self.view.frame;
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}
}
- (void)setScheduleScrollViewSubViewsLayoutForRotation {
for(UIView *subview in [scrollView subviews]) {
[subview removeFromSuperview];
}
[self setupScheduleScrollPage];
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * currentPageNum;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
}
相关文章推荐
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 使用XIB自定义一个UIView,然后将这个view添加到controller的view 上(相当于所有界面都通过xib来实现)
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 环信头像和昵称显示问题 (添加消息扩展)--本人已实现效果
- 使用XIB自定义一个UIView,然后将这个view添加到controller的view 上(相当于所有界面都通过xib来实现)
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- ListView中添加ScrollView只显示一两行的问题
- android客户端学习-scrollview中添加webview显示空白的问题
- 利用DhtmlXtree实现展现,修改,添加,删除,移动功能一棵树上实现,iframe的单个滑动条显示,包含在iframe中树节点中文内容过长问题解决
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- ScrollView下放置UIGrid实现下拉条控制显示区域,动态更新UIGrid子类时,可视区移动问题
- scrollview添加自定义view的滑动显示问题
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 使用XIB自定义一个UIView,然后将这个view添加到controller的view 上(相当于所有界面都通过xib来实现)
- Storyboard下实现的ScrollView内添加控件后无法滚动问题
- 解决 通过继承QAbstractTableModel并实现headerData方法给QTableView添加标题时,标题不显示 的问题
- Android GridView之添加分隔线,动态设置高度,实现高度自适应,并解决第一个item不显示的问题
- 在ScrollView添加一个ListView造成的滚动问题的简单解决办法()
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- android 使用Dialog实现Toast效果,解决有的机型不显示Toast的问题(保证能用)