UIKit的类层次结构

根据iPhone官方的统计,App Store中游戏类应用是最多的,大概是其它应用总和的1 .5倍,在排行前20的应用中,游戏类应用超过14个。 

iPhone窗口系统如下: 

ü       UIKit.framwork

?       UIScreen

?       UIWindow

?       UIView 

ü       QuartzCore.framework

?       CALayer

?       CAEAGLLayer 

       本文主要讲解UIKit.framework图形框架,其中UIScreen提供了屏幕的基本系统,定义如下: 

  UIScreen.h
//  UIKit

//

//  Copyright 2007-2009 Apple Inc. All rights reserved.

//

 

#import <Foundation/Foundation.h>

#import <CoreGraphics/CoreGraphics.h>

#import <UIKit/UIKitDefines.h>

 

UIKIT_EXTERN_CLASS @interface UIScreen : NSObject {

  @private

    CGRect _bounds;

}

 

+ (UIScreen *)mainScreen;

 

@property(nonatomic,readonly) CGRect bounds;              // Bounds of entire screen in points

@property(nonatomic,readonly) CGRect applicationFrame;    // Frame of  application screen area in points (i.e. entire screen minus status bar  if visible)

 

@end

 

这个类提供了屏幕的bounds(即可绘制区域drawable),屏幕的尺寸和位置,而接口mainScreen()获取当前窗口的主屏幕。

 

UIWindow是UIView的子类,UIView是所有屏幕视图的SuperClass,比如UIButton、UILabel、UIImageView等,UIView类中定义如下:

 

@property(nonatomic,readonly) UIView       *superview;

@property(nonatomic,readonly,copy) NSArray *subviews;

@property(nonatomic,readonly) UIWindow     *window;

 

- (void)removeFromSuperview;

- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;

- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;

 

- (void)addSubview:(UIView *)view;

- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;

- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;

 

- (void)bringSubviewToFront:(UIView *)view;

- (void)sendSubviewToBack:(UIView *)view;

 

- (void)didAddSubview:(UIView *)subview;

- (void)willRemoveSubview:(UIView *)subview;

 

- (void)willMoveToSuperview:(UIView *)newSuperview;

- (void)didMoveToSuperview;

- (void)willMoveToWindow:(UIWindow *)newWindow;

- (void)didMoveToWindow;

 

可见,利用UIView类可以获取当前视图的“父视图”、“子视图数组”,还可以添加一个“子视图”到当前的视图、删除“子视图”、插入“子视图”等操作。

 

它们的继承关系如下图:

 


 

UIResponder – UIView – 自定义视图

                           |

UIButton、UILabel、UIImageView等

 

本文的主要任务是创建一个全屏显示的自定义窗口。

新建一个“Window-based Application”项目,输入项目名字“CrazyWindGameEngine”,然后Build&Go可以看到一个浅灰色背景的屏幕,这个默认的屏幕存在几个问题:

 

首先需要隐藏“Status Bar”,这个通过在CrazyWindGameEngine-info.plist中添加“Status bar is initially hidden”并勾选,Phone屏幕的构造如下图:

 


 

 

其次,这个模板程序是通过从CrazyWindGameEngine-info.plist文件的“Main nib file base  name”属性中读取MainWindow.xib而生成窗口的,所以需要把模板相应的模块去掉并加入自己生成的窗口,这需要以下几个步骤:

?       删除CrazyWindGameEngine-info.plist中的Main nib file base name属性和相应的值。

?       到Resources目录下删除MainWindow.xib文件。

?       到main.m中修改代码如下:

?        int retVal = UIApplicationMain(argc, argv, nil, @"CrazyWindGameEngineAppDelegate");

?       CrazyWindGameEngineAppDelegate.h中变量window的IBOutlet关键字去掉(也可以保留,不影响)。

 

经过以上的步骤,模板生成的窗口就被删除掉了,接下来需要添家自己定义的窗口,代码如下:

 

#import "CrazyWindGameEngineAppDelegate.h"

@implementation CrazyWindGameEngineAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

// setup the main window

CGRect windowRect = [[UIScreen mainScreen] bounds];

window = [[UIWindow alloc] initWithFrame:windowRect];

[window setBackgroundColor:[UIColor redColor]];

[window makeKeyAndVisible];

}

 

上面的代码会产生一个“红色背景的窗口”,在前面讲过UIView类提供了“添加视图”、“插入视图”、“删除视图”等操作,而UIButton、 UILabel、UIImageView等类继承自UIView,所以下面的代码中尝试添加一个UIButton、一个UILabel、一个 UIImageView到新产生的窗口中,如下:

 

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

// setup the main window

CGRect windowRect = [[UIScreen mainScreen] bounds];

window = [[UIWindow alloc] initWithFrame:windowRect];

[window setBackgroundColor:[UIColor redColor]];

// Set up the background image

UIImageView *mBgView = [[[UIImageView alloc] initWithImage: [UIImage applicationImageNamed:@"screenshot.png"]] autorelease];

// 旋转UIImageView

float rotateAngle = M_PI/2;

CGAffineTransform transform = CGAffineTransformMakeRotation(rotateAngle);

mBgView.transform = transform;

[window setContentView: mBgView]; 

[mBgView release];

// add a UILabel

CGRect labelRect = [[UIScreen mainScreen] applicationFrame];

UILabel* label = [[UILabel alloc]  initWithFrame:CGRectMake(labelRect.origin.x+30, labelRect.origin.y+150,  labelRect.size.width-60, labelRect.size.height-300)];

label.text = @"CrazyWindGameEngine";

label.backgroundColor = [UIColor blackColor];

label.shadowColor = [UIColor whiteColor];

label.textAlignment = UITextAlignmentCenter;

label.font = [UIFont systemFontOfSize:22.0];

label.textColor = [UIColor grayColor];

[window addSubview:label];

[label release];

// add a UIButton

UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[button setFrame:CGRectMake(0.0f, 0.0f, 80.0f, 30.0f)];

[button setCenter:CGPointMake(160.0f,208.0f)];

[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

[button setTitle:@"Start" forState:UIControlStateNormal];

[button addTarget:self action:@selector(playSound:) forControlEvents:UIControlEventTouchUpInside];

[button setBackgroundColor:[UIColor redColor]];

[button setAlpha:20];

[window addSubview:button];

[button release];

// Override point for customization after application launch

    [window makeKeyAndVisible];

}

- (void)dealloc {

    [window release];

    [super dealloc];

}

@end

 

其中我们利用了UIImageView类的旋转方法transform属性对图片进行旋转,运行效果如下图:

 

转自 http://blog.csdn.net/dongfengsun/archive/2009/11/14/4811314.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UIKitiOS开发中最常用的UI框架之一。它为开发者提供了一系列的UI组件和工具,用于构建iOS应用的用户界面。UIKit框架涵盖了诸如按钮、标签、文本框、图像视图、表格视图等常见的UI元素,同时也包括一些更高级的组件,如集合视图、滚动视图、分段控制等。 在UIKit中,视图(View)是构建界面的基本单元。视图可以是按钮、标签、文本框等单一的UI元素,也可以是由多个视图组成的复杂UI元素。视图之间可以建立层次结构,即一个视图可以作为另一个视图的子视图,从而实现对界面的布局和组织。 UIKit中的控制器(Controller)负责管理视图,并协调视图之间的交互。控制器可以是一个视图控制器(View Controller),也可以是一个导航控制器(Navigation Controller)或选项卡控制器(Tab Bar Controller)等高级控制器。视图控制器是一个用于管理单个视图的控制器,导航控制器用于管理具有导航功能的视图层次结构,而选项卡控制器则用于实现选项卡式的界面。 除了基本的UI组件和控制器外,UIKit还提供了一些工具,用于处理文本、图像、动画等。例如,UIKit框架中的NSAttributedString用于创建富文本文本字符串,而UIImageView用于显示图像。 在iOS应用程序中,UIKit是开发者构建用户界面的首选框架之一。它不仅提供了一系列常用的UI组件和工具,而且易于使用,并且有大量的文档和教程可供参考。同时,UIKit也不断更新和改进,以满足开发者的不断需求和变化的用户需求。 ### 回答2: UIKit是苹果公司的一个开发框架,用于创建iOS和tvOS应用程序的用户界面。它是一个强大而灵活的框架,提供了许多预先设计的界面元素和功能,使开发者能够轻松地构建精美且功能丰富的应用程序。 UIKit细分至少有四个主要方面:视图、控制器、动画和事件处理。 首先,视图是UIKit的基本构建块之一。视图用于显示应用程序的用户界面,并支持用户与应用程序进行交互。UIKit提供了许多不同型的视图,如标签、按钮、文本框等,开发者可以根据应用程序的需求选择合适的视图来构建用户界面。 其次,控制器是UIKit中另一个重要的概念。控制器负责管理视图的显示和交互。它们充当视图和数据之间的桥梁,处理用户输入并相应地更新视图和数据模型。UIKit提供了许多内置的控制器,如视图控制器和导航控制器,开发者可以使用这些控制器来管理应用程序的层次结构和导航。 第三,动画是一个重要的UIKit特性,用于为应用程序添加交互和视觉效果。UIKit提供了丰富的动画API,使开发者能够创建平滑和生动的过渡效果。开发者可以使用动画来改变视图的位置、大小、透明度等属性,以及创建复杂的视图转场效果。 最后,事件处理是UIKit的关键功能之一。它允许应用程序响应用户的操作,如触摸、手势等。UIKit提供了触摸和手势识别器等功能,使开发者能够捕获和处理用户的输入。开发者可以通过实现相关的事件处理方法来响应用户的操作,例如触摸事件的开始、移动和结束等。 综上所述,UIKit是一个功能强大且灵活的框架,提供了视图、控制器、动画和事件处理等各种功能,有助于开发者构建精美和功能丰富的iOS和tvOS应用程序。无论是设计用户界面、管理视图层次结构、创建动画效果还是处理用户事件,UIKit都为开发者提供了一系列强大的工具和组件。 ### 回答3: UIKit 是苹果公司为 iOS 操作系统开发的图形用户界面框架,它提供了一套强大易用的界面组件和工具,使开发人员能够方便地构建各种 iOS 应用程序。 UIKit 细分主要有以下几个方面。 一、视图组件: UIKit 提供了丰富的视图组件,包括按钮、标签、文本框等。这些视图组件可以通过创建实例对象并设置相关属性来实现自定义样式和行为。 二、视图控制器: UIKit 的视图控制器用于管理应用程序界面的展示和交互,提供了导航控制、标签控制、表格控制等功能。开发人员可以通过集成和自定义视图控制器来构建复杂的应用程序界面。 三、动画效果: UIKit 提供了强大的动画效果支持,包括淡入淡出、平移、缩放等。开发人员可以利用这些动画效果来实现更加生动和吸引人的界面交互。 四、触摸手势: UIKit 提供了丰富的触摸手势支持,包括点击、滑动、捏合等。开发人员可以通过处理这些触摸手势来实现各种交互操作,提升用户体验。 五、绘图和图形处理: UIKit 提供了强大的绘图和图形处理功能,包括绘制基本图形、渐变色、图像处理等。开发人员可以利用这些功能来实现自定义的图形界面元素和效果。 六、文本和字体: UIKit 提供了文本处理和字体管理的功能,包括文本布局、文本渲染、字体样式等。开发人员可以利用这些功能来实现自定义的文本显示和编辑操作。 总结来说,UIKitiOS 应用程序界面设计和开发的核心框架,通过提供丰富的视图组件、视图控制器、动画效果、触摸手势、绘图和图形处理功能,以及文本和字体处理功能,使开发人员能够构建出富有创意和吸引力的 iOS 应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值