上QQ阅读APP看书,第一时间看更新
实例012 设置UIView的位置和尺寸
实例说明
曾经有人这么说过,在iOS里看到的和摸到的都是UIView,所以UIView在iOS开发里具有非常重要的作用。视图和窗口展示了应用的用户界面,同时负责界面的交互。UIKit和其他系统框架提供了很多视图,开发人员可以就地使用而几乎不需要修改。当展示的内容与标准视图允许有很大的差别时,开发人员也可以定义自己的视图。无论是使用系统的视图还是创建自己的视图,需要理解类UIView和类UIWindow所提供的基本结构。这些类提供了复杂的方法来管理视图的布局和展示。理解这些方法的工作非常重要,使开发人员在应用发生改变时可以确认视图有合适的行为。
在iOS应用中,绝大部分可视化操作都是由视图对象(即UIView类的实例)进行的。一个视图对象定义了一个屏幕上的一个矩形区域,同时处理该区域的绘制和触屏事件。一个视图也可以作为其他视图的父视图,同时决定着这些子视图的位置和大小。UIView类做了大量的工作去管理这些内部视图的关系,但是需要的时候也可以定制默认的行为。
在本实例中,使用方法initWithFrame可以依照Frame建立新的View,建立出来的View要通过addSubview加入到父View中。本实例的最终目的是,分别在屏幕中间和屏幕右上角设置两个区域。
具体实现
实例文件UIkitPrjFrame.h的实现代码如下所示。
#import "SampleBaseController.h" @interface UIKitPrjFrame : SampleBaseController { @private } @end
实例文件UIkitPrjFrame.m的实现代码如下所示。
#import "UIKitPrjFrame.h" @implementation UIKitPrjFrame #pragma mark ----- Override Methods ----- - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor blackColor]; UILabel* label1 = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; label1.text = @"右上方"; // 将label1的frame修改成任意的区域 CGRect newFrame = CGRectMake( 220, 20, 100, 50 ); label1.frame = newFrame; UILabel* label2 = [[[UILabel alloc] initWithFrame:[label1 frame]] autorelease]; label2.textAlignment = UITextAlignmentCenter; label2.text = @"中心位置"; // 将label2的center调整到画面中心 CGPoint newPoint = self.view.center; // 空出状态条高度大小 newPoint.y -= 20; label2.center = newPoint; // 向画面中追加label1 与label2 [self.view addSubview:label1]; [self.view addSubview:label2]; UILabel* label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; // frame的设置 label.frame = CGRectMake( 0, 0, 200, 50 ); // center设置 label.center = CGPointMake( 160, 240 ); // frame的参照 NSLog( @"x = %f", label.frame.origin.x ); NSLog( @"y = %f", label.frame.origin.y ); NSLog( @"width = %f", label.frame.size.width ); NSLog( @"height = %f", label.frame.size.height ); // center的参照 NSLog( @"x = %f", label.center.x ); NSLog( @"y = %f", label.center.y ); } - (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { [self.navigationController setNavigationBarHidden:NO animated:YES]; } @end
执行效果如图2-15所示。
图2-15 执行效果