iphone/ipad关于size, frame and bounds总结和UIScroll view学习笔记

iphone/ipad关于size, frame and bounds总结和UIScroll view学习笔记

1. iphone/ipad大小

DeviceScreen dimensions(in points)
iphone and ipod320 X 480
ipad768 X 1024

2. UIScreen bounds and applicationFrame

[UISCreen mainScreen].bounds, 永远返回portait模式的width/height, 也就是说width:320 height:480 for iPhone

[UISCreen mainScreen].applicationFrame更加复杂一些,它考虑了status bar的高度。

portait模式, x:0, y:20, width:320, height:460

landscape,   x:20, y:0, width:300, height:480

关于frame和bounds的区别,请参考UIView中的frame和bounds属性的区别

3. status bar height: 20, tool bar height: 44, tab bar height:44

4. UIScrollView

  • contentSize和contentInSet


  • contentOffSet:
当前scroll view可见的左上角顶点在content view中的位置, 可以在代码中通过控制这个直实现滚动scroll view. 例如如果一个view里面有很多text field,当键盘显示的时候,这个text field可能会被隐藏掉,因此我们需要把text field scroll到可见的区域。如下图所示的情况:

  1. // Called when the UIKeyboardDidShowNotification is sent.  
  2. - (void)keyboardWasShown:(NSNotification*)aNotification  
  3. {  
  4.     NSDictionary* info = [aNotification userInfo];  
  5.     CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;  
  6.    
  7.     UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);  
  8.     scrollView.contentInset = contentInsets;  
  9.     scrollView.scrollIndicatorInsets = contentInsets;  
  10.    
  11.     // If active text field is hidden by keyboard, scroll it so it's visible  
  12.     // Your application might not need or want this behavior.  
  13.     CGRect aRect = self.view.frame;  
  14.     aRect.size.height -kbSize.height;  
  15.     if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) { //判断该text field是否在可见区域  
  16.         CGPoint scrollPoint = CGPointMake(0.0, instance); //这里需要计算需要scroll的长度,假设instance是计算出来的结果。  
  17.         [scrollView setContentOffset:scrollPoint animated:YES];  
  18.     }  
  19. }  

  • UIScroll view使用翻页模式

原文来自这里, 这里介绍几个关键的内容:

1.  pagingMode需要设置为YES

2. contentSize是所有页数的width总和, 例如你需要显示100页,那contentSize的宽度就是100*scroll.frame.size.width

3. showsHorizontalScrollIndicator和showsVerticalScrollIndicator设置为NO

然后需要在scroll view的delegate中实现scrollViewDidScroll:方法,这个方法在scroll view的contentOffSet发生变化的时候被调用。翻页模式的核心思想就是scroll view需要显示下一页的时候,创建一个view, 在这个view上准备好数据,然后把这个view加到scroll view当前显示的位置。

代码如下所示,另外还可以改进的一个地方是需要翻页之前,需要把后面一页的内容也显示出来,否则会有一半黑的屏幕显示。 

  1. -(void) loadPageView:(NSUInteger)page  
  2. {  
  3.     UIView* view = [[UIView alloc] init];  
  4.     view.backgroundColor = [UIColor whiteColor];  
  5.       
  6.     CGRect rc = self.view.frame;  
  7.     rc.origin.y = 0;  
  8.     rc.origin.x = page * self.view.frame.size.width;  //创建一个view,调整x直,因为其他直和scroll view都是一样的  
  9.     view.frame = rc;  
  10.       
  11.     UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, rc.size.width, 40)];  
  12.     label.text = [NSString stringWithFormat:@"current page is :%d", page];  
  13.     [view addSubview:label];  
  14.       
  15.     [(UIScrollView*)self.view addSubview:view];  
  16. }  
  17.   
  18. - (void)scrollViewDidScroll:(UIScrollView *)scrollView  
  19. {  
  20.     if (scrollView.contentOffset.x >= (myCurrentPage+0.5) * self.view.frame.size.width) //需要显示下一页了  
  21.     {  
  22.         myCurrentPage++;  
  23.         [self loadPageView:myCurrentPage];  
  24.     }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值