1. UILabel
·UILable是iPhone界面最基本的控件,主要用来显示文本信息。
·常用属性和方法有:
1、创建
CGRect rect = CGRectMake(100, 200, 50, 50);
UILabel *label = [[UILabel alloc] initWithFrame:rect];
2、text //设置和读取文本内容,默认为nil
label.text = @”文本信息”; //设置内容
NSLog(@”%@”, label.text); //读取内容
3、textColor //设置文字颜色,默认为黑色
lable.textColor = [UIColor redColor];
4、font //设置字体大小,默认17
label.font = [UIFont systemFontOfSize:20]; //⼀一般方法
label.font = [UIFont boldSystemFontOfSize:20]; //加粗方法
label.font = [UIFont fontWithName:@"Arial" size:16]; //指定
字体的方法
//还有⼀一种从外部导入字体的方法。
5、textAlignment //设置标签文本对齐方式。
label.textAlignment = NSTextAlignmentCenter; //还有
NSTextAlignmentLeft、 NSTextAlignmentRight.
6、numberOfLines //标签最多显示行数,如果为0则表示多行。
label.numberOfLines = 2;
7、enabled //只是决定了Label的绘制方式,将它设置
为NO将会使文本变暗,表示它没有激活,这时向它设置颜色值是无效的。
label.enable = NO;
8、highlighted //是否高亮显示
label.highlighted = YES;
label.highlightedTextColor = [UIColor orangeColor]; //高亮
显示时的文本颜色
9、ShadowColor //设置阴影颜色
[label setShadowColor:[UIColor blackColor]];
10、ShadowOffset //设置阴影偏移量
[label setShadowOffset:CGSizeMake(-1, -1)];
11、baselineAdjustment //如果adjustsFontSizeToFitWidth属性设
置为YES,这个属性就来控制文本基线的行为。
label.baselineAdjustment = UIBaselineAdjustmentNone;
UIBaselineAdjustmentAlignBaselines = 0,默认,文本最上端与中线对齐。
UIBaselineAdjustmentAlignCenters, 文本中线与label中线对齐。
UIBaselineAdjustmentNone, 文本最低端与label中线对齐。
12、Autoshrink //是否自动收缩
Fixed Font Size 默认,如果Label宽度小于文字长度时时,文字大小不自动缩放
minimumScaleFactor 设置最小收缩比例,如果Label宽度小于文字长度时,文字
进行收缩,收缩超过比例后,停止收缩。
minimumFontSize 设置最小收缩字号,如果Label宽度小于文字长度时,文字字号
减小,低于设定字号后,不再减小。//6.0以后不再使用了。
label.minimumScaleFactor = 0.5;
13、adjustsLetterSpacingToFitWidth //改变字母之间的间距来适应Label大小
myLabel.adjustsLetterSpacingToFitWidth = NO;
14、 lineBreakMode //设置文字过长时的显示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显
示,后面部分省略不显示。
label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内
容长度,后半部分被删除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字
以……方式省略,显示尾部文字内容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容
以……方式省略,显示头尾的文字内容。
label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容
以……方式省略,显示头的文字内容。
label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显
示,后面部分省略不显示。
15、 adjustsFontSizeToFitWidth //设置字体大小适应label宽度
label.adjustsFontSizeToFitWidth = YES;
16、attributedText:设置标签属性文本。
NSString *text = @"first";
NSMutableAttributedString *textLabelStr =
[[NSMutableAttributedString alloc]
initWithString:text];
[textLabelStr
setAttributes:@{NSForegroundColorAttributeName :
[UIColor lightGrayColor], NSFontAttributeName :
[UIFont systemFontOfSize:17]} range:NSMakeRange(11,
10)];
label.attributedText = textLabelStr;
17、竖排文字显示每个文字加一个换行符,这是最方便和简单的实现方式。
label.text = @"请\n竖\n直\n方\n向\n排\n列";
label.numberOfLines = [label.text length];
18、计算UIlabel 随字体多行后的高度
CGRect bounds = CGRectMake(0, 0, 200, 300);
heightLabel = [myLabel textRectForBounds:bounds
limitedToNumberOfLines:20]; //计算20行后的Label的Frame
NSLog(@"%f",heightLabel.size.height);
19、UILabel根据字数多少自动实现适应高度
UILabel *msgLabel = [[UILabel alloc]
initWithFrame:CGRectMake(15, 45, 0, 0)];
msgLabel.backgroundColor = [UIColor lightTextColor];
[msgLabel setNumberOfLines:0];
msgLabel.lineBreakMode = UILineBreakModeWordWrap;
msgLabel.font = [UIFont fontWithName:@"Arial" size:12];
CGSize size = CGSizeMake(290, 1000);
msgLabel.text = @"获取到的deviceToken,我们可以通过webservice服务提
交给.net应用程序,这里我简单处理,直接打印出来,拷贝到.net应用环境中使
用。";
CGSize msgSie = [msgLabel.text sizeWithFont:fonts
constrainedToSize:size];
[msgLabel setFrame:CGRectMake(15, 45, 290, msgSie.height)];
20、渐变字体Label
UIColor *titleColor = [UIColor colorWithPatternImage:[UIImage
imageNamed:@"btn.png"]];
NSString *title = @"Setting";
UILabel *titleLabel = [[UILabel alloc]
initWithFrame:CGRectMake(0, 0, 80, 44)];
titleLabel.textColor = titleColor;
titleLabel.text = title;
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.backgroundColor = [UIColor clearColor];
[self.view addSubview:titleLabel];
[titleLabel release];
21、Label添加边框
titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];
titleLabel.layer.borderWidth = 2;
2. UIButtom
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; | ||
|
// 能够定义的button类型有以下6种, | |
// typedef enum { |
// UIButtonTypeCustom = 0, 自定义风格 | |
// UIButtonTypeRoundedRect, 圆角矩形 |
|
// UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用 | |
// UIButtonTypeInfoLight, 亮色感叹号 |
// UIButtonTypeInfoDark, 暗色感叹号 | |
// UIButtonTypeContactAdd, 十字加号按钮 |
// } UIButtonType; | |||
13 |
|
|
//给定button在view上的位置 | |
button1.frame = CGRectMake(20, 20, 280, 20); |
| |
//button背景色 |
button1.backgroundColor = [UIColor clearColor]; | |
|
//设置button填充图片 | |
//[button1 setImage:[UIImage imageNamed:@"btng.png"] forState:UIControlStateNormal]; |
| |
//设置button标题 |
[button1 setTitle:@"点击" forState:UIControlStateNormal]; | |
|
/* forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现*/ | |
//以下是几种状态 |
// enum { | |
// UIControlStateNormal = 0, 常规状态显现 |
// UIControlStateHighlighted = 1 << 0, 高亮状态显现 | |
// UIControlStateDisabled = 1 << 1, 禁用的状态才会显现 |
// UIControlStateSelected = 1 << 2, 选中状态 | |
// UIControlStateApplication = 0x00FF0000, 当应用程序标志时 |
// UIControlStateReserved = 0xFF000000 为内部框架预留,可以不管他 | |
// }; |
| ||
| /* |
* 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为no, | |
* 那么可以去掉这个功能 |
*/ | |
button1.adjustsImageWhenHighlighted = NO; |
/*跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置*/ | |
button1.adjustsImageWhenDisabled = NO; |
/* 下面的这个属性设置为yes的状态下,按钮按下会发光*/ | |
button1.showsTouchWhenHighlighted = YES; |
| |
/* 给button添加事件,事件有很多种,我会单独开一篇博文介绍它们,下面这个时间的意思是 |
按下按钮,并且手指离开屏幕的时候触发这个事件,跟web中的click事件一样。 | |
触发了这个事件以后,执行butClick:这个方法,addTarget:self 的意思是说,这个方法在本类中 |
也可以传入其他类的指针*/ | |
[button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
|
| //显示控件 | |
[self.view addSubview:button1]; | ||
|
|
3. Segmented Control
NSArray *segmentedArray =[[NSArrayalloc]initWithObjects:@"1",@"2",@"3",@"4",nil];
//初始化UISegmentedControl
UISegmentedControl *segmentedControl= [[UISegmentedControlalloc]initWithItems:segmentedArray];
segmentedControl.frame = CGRectMake(20.0,20.0, 250.0, 50.0);
segmentedControl.selectedSegmentIndex = 2;//设置默认选择项索引
segmentedControl.tintColor =[UIColor redColor];
//有基本四种样式
segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;//设置样式
//segmentedControl.segmentedControlStyle = UISegmentedControlStyleBordered;//设置样式
//segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;//设置样式
//segmentedControl.segmentedControlStyle = UISegmentedControlStyleBezeled;//设置样式
// segmentedControl.momentary = YES;//设置在点击后是否恢复原样
[segmentedControlsetTitle:@"two" forSegmentAtIndex:1];//设置指定索引的题目
[segmentedControl insertSegmentWithImage:[UIImageimageNamed:@"mei.png"] atIndex:2 animated:NO];//在指定索引插入一个选项并设置图片
[segmentedControl removeSegmentAtIndex:0animated:NO];//移除指定索引的选项
// [segmentedControl setWidth:70.0forSegmentAtIndex:2];//设置指定索引选项的宽度
// [segmentedControlsetContentOffset:CGSizeMake(10.0,10.0) forSegmentAtIndex:4];//设置选项中图片等的左上角的位置
//获取指定索引选项的图片imageForSegmentAtIndex:
UIImageView *imageForSegmentAtIndex= [[UIImageViewalloc]initWithImage:[segmentedControl imageForSegmentAtIndex:1]];
imageForSegmentAtIndex.frame = CGRectMake(60.0, 120.0, 30.0, 30.0); ;
//获取指定索引选项的标题titleForSegmentAtIndex
UILabel *titleForSegmentAtIndex= [[UILabel alloc]initWithFrame:CGRectMake(100.0, 160.0, 30.0, 30.0)];
titleForSegmentAtIndex.text =[segmentedControl titleForSegmentAtIndex:0];
//获取总选项数segmentedControl.numberOfSegments
UILabel *numberOfSegments= [[UILabel alloc]initWithFrame:CGRectMake(140.0, 170.0, 30.0, 30.0)];
numberOfSegments.text =[NSString stringWithFormat:@"%d",segmentedControl.numberOfSegments];
//获取指定索引选项的宽度widthForSegmentAtIndex:
UILabel *widthForSegmentAtIndex= [[UILabel alloc]initWithFrame:CGRectMake(180.0, 210.0, 70.0, 30.0)];
widthForSegmentAtIndex.text =[NSString stringWithFormat:@"%f",[segmentedControl widthForSegmentAtIndex:2]];
// [segmentedControlsetEnabled:NO forSegmentAtIndex:4];//设置指定索引选项不可选
// BOOL enableFlag =[segmentedControl isEnabledForSegmentAtIndex:4];//判断指定索引选项是否可选
4. Text Field
//初始化textfield并设置位置及大小
UITextField *text = [[UITextFieldalloc]initWithFrame:CGRectMake(20, 20, 130, 30)];
//设置边框样式,只有设置了才会显示边框样式
text.borderStyle =UITextBorderStyleRoundedRect;
typedef enum {
UITextBorderStyleNone,
UITextBorderStyleLine,
UITextBorderStyleBezel,
UITextBorderStyleRoundedRect
} UITextBorderStyle;
//设置输入框的背景颜色,此时设置为白色 如果使用了自定义的背景图片边框会被忽略掉
text.backgroundColor = [UIColorwhiteColor];
//设置背景
text.background = [UIImageimageNamed:@"dd.png"];
//设置背景
text.disabledBackground = [UIImageimageNamed:@"cc.png"];
//当输入框没有内容时,水印提示 提示内容为password
text.placeholder = @"password";
//设置输入框内容的字体样式和大小
text.font = [UIFontfontWithName:@"Arial" size:20.0f];
//设置字体颜色
text.textColor = [UIColor redColor];
//输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容
text.clearButtonMode =UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever, 重不出现
UITextFieldViewModeWhileEditing, 编辑时出现
UITextFieldViewModeUnlessEditing, 除了编辑外都出现
UITextFieldViewModeAlways 一直出现
} UITextFieldViewMode;
//输入框中一开始就有的文字
text.text = @"一开始就在输入框的文字";
//每输入一个字符就变成点 用语密码输入
text.secureTextEntry = YES;
//是否纠错
text.autocorrectionType =UITextAutocorrectionTypeNo;
typedef enum {
UITextAutocorrectionTypeDefault, 默认
UITextAutocorrectionTypeNo, 不自动纠错
UITextAutocorrectionTypeYes, 自动纠错
} UITextAutocorrectionType;
//再次编辑就清空
text.clearsOnBeginEditing = YES;
//内容对齐方式
text.textAlignment = UITextAlignmentLeft;
//内容的垂直对齐方式 UITextField继承自UIControl,此类中有一个属性contentVerticalAlignment
text.contentVerticalAlignment =UIControlContentVerticalAlignmentCenter;
//设置为YES时文本会自动缩小以适应文本窗口大小.默认是保持原来大小,而让长文本滚动
textFied.adjustsFontSizeToFitWidth = YES;
//设置自动缩小显示的最小字体大小
text.minimumFontSize = 20;
//设置键盘的样式
text.keyboardType =UIKeyboardTypeNumberPad;
typedef enum {
UIKeyboardTypeDefault, 默认键盘,支持所有字符
UIKeyboardTypeASCIICapable, 支持ASCII的默认键盘
UIKeyboardTypeNumbersAndPunctuation, 标准电话键盘,支持+*#字符
UIKeyboardTypeURL, URL键盘,支持.com按钮 只支持URL字符
UIKeyboardTypeNumberPad, 数字键盘
UIKeyboardTypePhonePad, 电话键盘
UIKeyboardTypeNamePhonePad, 电话键盘,也支持输入人名
UIKeyboardTypeEmailAddress, 用于输入电子 邮件地址的键盘
UIKeyboardTypeDecimalPad, 数字键盘 有数字和小数点
UIKeyboardTypeTwitter, 优化的键盘,方便输入@、#字符
UIKeyboardTypeAlphabet =UIKeyboardTypeASCIICapable,
} UIKeyboardType;
//首字母是否大写
text.autocapitalizationType =UITextAutocapitalizationTypeNone;
typedef enum {
UITextAutocapitalizationTypeNone, 不自动大写
UITextAutocapitalizationTypeWords, 单词首字母大写
UITextAutocapitalizationTypeSentences, 句子的首字母大写
UITextAutocapitalizationTypeAllCharacters, 所有字母都大写
} UITextAutocapitalizationType;
//return键变成什么键
text.returnKeyType =UIReturnKeyDone;
typedef enum {
UIReturnKeyDefault, 默认 灰色按钮,标有Return
UIReturnKeyGo, 标有Go的蓝色按钮
UIReturnKeyGoogle,标有Google的蓝色按钮,用语搜索
UIReturnKeyJoin,标有Join的蓝色按钮
UIReturnKeyNext,标有Next的蓝色按钮
UIReturnKeyRoute,标有Route的蓝色按钮
UIReturnKeySearch,标有Search的蓝色按钮
UIReturnKeySend,标有Send的蓝色按钮
UIReturnKeyYahoo,标有Yahoo的蓝色按钮
UIReturnKeyYahoo,标有Yahoo的蓝色按钮
UIReturnKeyEmergencyCall, 紧急呼叫按钮
} UIReturnKeyType;
//键盘外观
textView.keyboardAppearance=UIKeyboardAppearanceDefault;
typedef enum {
UIKeyboardAppearanceDefault, 默认外观,浅灰色
UIKeyboardAppearanceAlert, 深灰 石墨色
} UIReturnKeyType;
5. Slider
初始化一个Slider
UISlider *slider = [[UISlideralloc]initWithFrame:CGRectMake(0, 400,320 , 20)];
访问UISlider的值
slider.value = 3; // 设置 slider 的值
float value =slider.value; // 得到 slider 的值
[slider setValue:3animated:YES]; // 设置 slider 的值
slider.minimumValue = 0; //设置滑轮所能滚动到的最小值
slider.maximumValue = 1; //设置滑轮所能滚动到的最大值
6. Switch
1.UISwitch的初始化
UISwitch *switchView = [[UISwitchalloc] initWithFrame:CGRectMake(54.0f, 16.0f, 100.0f, 28.0f)];
2.设置UISwitch的初始化状态
switchView.on = YES;//设置初始为ON的一边
二, 常用控件的事件响应方法
1. Button
[btn1 addTarget:selfaction:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];
2.Segmented Control
[mySegmentedControladdTarget:selfaction:@selector(segmentAction:)forControlEvents:UIControlEventValueChanged]; //添加委托方法
//具体委托方法实例
-(void)segmentAction:(UISegmentedControl *)Seg{
NSInteger Index =Seg.selectedSegmentIndex;
NSLog(@"Index %i",Index);
switch (Index) {
case 0:
[self selectmyView1];
break;
case 1:
[self selectmyView2];
break;
case 2:
[self selectmyView3];
break;
case 3:
[self selectmyView4];
break;
case 4:
[self selectmyView5];
break;
case 5:
[self selectmyView6];
break;
default:
break;
}
}
//自定义UISegmentedcontrol
UISegmentedControl*segmentedControl=[[UISegmentedControl alloc] initWithFrame:CGRectMake(80.0f,8.0f, 200.0f, 30.0f) ];
[segmentedControlinsertSegmentWithTitle:@"Food to eat" atIndex:0 animated:YES];
[segmentedControlinsertSegmentWithTitle:@"Food to avoid" atIndex:1 animated:YES];
segmentedControl.segmentedControlStyle =UISegmentedControlStyleBar;
segmentedControl.momentary = YES;
segmentedControl.multipleTouchEnabled=NO;
[segmentedControl addTarget:selfaction:@selector(Selectbutton:) forControlEvents:UIControlEventValueChanged];
UIBarButtonItem *segButton = [[UIBarButtonItemalloc] initWithCustomView:segmentedControl];
self.navigationItem.rightBarButtonItem =segButton; //添加到导航栏中
3.Text Field
//设置代理 用于实现协议
text.delegate = self;
//把textfield加到视图中
[self.window addSubview:text];
//最右侧加图片是以下代码 左侧类似
UIImageView *image=[[UIImageViewalloc] initWithImage:[UIImage imageNamed:@"right.png"]];
text.rightView=image;
text.rightViewMode =UITextFieldViewModeAlways;
typedef enum {
UITextFieldViewModeNever,
UITextFieldViewModeWhileEditing,
UITextFieldViewModeUnlessEditing,
UITextFieldViewModeAlways
} UITextFieldViewMode;
//按return键键盘往下收 becomeFirstResponder
类要采用UITextFieldDelegate协议
text.delegate = self; 声明text的代理是我,我会去实现把键盘往下收的方法 这个方法在UITextFieldDelegate里所以我们要采用UITextFieldDelegate这个协议
- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
[text resignFirstResponder]; //主要是[receiverresignFirstResponder]在哪调用就能把receiver对应的键盘往下收
return YES;
}
重写绘制行为
除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。
– textRectForBounds: //重写来重置文字区域
– drawTextInRect: //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.
– placeholderRectForBounds: //重写来重置占位符区域
– drawPlaceholderInRect: //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.
– borderRectForBounds: //重写来重置边缘区域
– editingRectForBounds: //重写来重置编辑区域
– clearButtonRectForBounds: //重写来重置clearButton位置,改变size可能导致button的图片失真
– leftViewRectForBounds:
– rightViewRectForBounds:
委托方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//返回一个BOOL值,指定是否循序文本字段开始编辑
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
//开始编辑时触发,文本字段将成为first responder
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
//返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder
//要想在用户结束编辑时阻止文本字段消失,可以返回NO
//这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息
return NO;
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
//当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
//这对于想要加入撤销选项的应用程序特别有用
//可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。
//要防止文字被改变可以返回NO
//这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
//返回一个BOOL值指明是否允许根据用户请求清除内容
//可以设置在特定条件下才允许清除内容
return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
//返回一个BOOL值,指明是否允许在按下回车键时结束编辑
//如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder];
//查一下resign这个单词的意思就明白这个方法了
return YES;
}
通知
UITextField派生自UIControl,所以UIControl类中的通知系统在文本字段中也可以使用。除了UIControl类的标准事件,你还可以使用下列UITextField类特有的事件
UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification
当文本字段退出编辑模式时触发。通知的object属性存储了最终文本。
因为文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知
UIKeyboardWillShowNotification //键盘显示之前发送
UIKeyboardDidShowNotification //键盘显示之后发送
UIKeyboardWillHideNotification //键盘隐藏之前发送
UIKeyboardDidHideNotification //键盘隐藏之后发送
4. Slider
[sliderA addTarget:selfaction:@selector(sliderDragUp:) forControlEvents:UIControlEventTouchUpInside];
5. Switch
[switchView addTarget:selfaction:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];
三, 常用内置视图种类和使用方法
1. Progress View
UIProgressView 进度指示器
UIProgressView 与UIActivityIndicatorView相似,只不过它提供了一个接口让你可以显示一个类似进度条的东西,这样就能让用户知道当前操作完成了多少(告知用户离操作结束还多远)。
一.创建
UIProgressView* progressView = [ [UIProgressView alloc ]
initWithFrame:CGRectMake(150.0,20.0,130.0,30.0)];
二. 设置风格:
progressView .UIProgressViewStyle=UIProgressViewStyleDefault;
系统给你提供了2种风格:
UIProgressViewStyleDefault 标准进度条
UIProgressViewStyleDefault 深灰色进度条,用于工具栏中
三.显示
[ self.toolBar addSubview:progressView ];
四.进度
当它显示出来时你的程序可以更新它的进度,属性progress是一个0.0到1.0之间的浮点数:
progressView.progress = 0. 5;
五.示例代码
4.09UIProgressView(1)
-(void)progressChanged:(NSTimer *)timer
{
if (_progressView.progress >= 1.0){
[timer invalidate];
}
//如果对象的progress大于1.0,则定时器失效
_progressView.progress += 0.02;
//让对象的progress值每次都加0.02,以此达到让进度动起来的效果。
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.progressView =[[UIProgressView alloc]init];
//创建一个UIProgressView对象:_progressView
_progressView.frame = CGRectMake(0, 20, 320,0);
//设置它的位置及大小,它的高是默认的为9,可以写成0。
_progressView.progressViewStyle =UIProgressViewStyleDefault;
//设置它的风格,为默认的
_progressView.trackTintColor =[UIColorblueColor];
//设置轨道的颜色
_progressView.progressTintColor =[UIColorwhiteColor];
//设置进度的颜色
_progressView.progress = 0.0;
//设置进度的初始值,即初始位置。范围是0.0-1.0
[self.view addSubview:_progressView];
//把_progressView加入到view上
[_progressView release];
//要记得release
[NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(progressChanged:)
userInfo:nil
repeats:YES];
//设置定时器
}
2. Page Control
pageCtrl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 400, bounds.size.width, 30)]; //创建UIPageControl,位置在屏幕最下方。
pageCtrl.numberOfPages = 6;//总的图片页数
pageCtrl.currentPage = 0; //当前页
[pageCtrl addTarget:self action:@selector(pageTurn:) forControlEvents:UIControlEventValueChanged]; //用户点击UIPageControl的响应函数
[self.view addSubview:pageCtrl]; //将UIPageControl添加到主界面上。
3. Scroll View
contentSize是scrollview可以滚动的区域,比如frame= (0 ,0 ,320 ,480) contentSize = (320 ,960),代表你的scrollview可以上下滚动,滚动区域为frame大小的两倍。
contentOffset是scrollview当前显示区域顶点相对于frame顶点的偏移量,比如上个例子你拉到最下面,contentoffset就是(0 ,480),也就是y偏移了480
contentInset是scrollview的contentview的顶点相对于scrollview的位置,例如你的contentInset= (0 ,100),那么你的contentview就是从scrollview的(0 ,100)开始显示
另外UITableView是UIScrollView的子类,它们在上述属性又有所不同,tabelview的contentsize是由它的下列方法共同实现的
- (NSInteger)numberOfSections;
- (NSInteger)numberOfRowsInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section;
它会自动计算所有的高度和来做为它的contentsize的height.
例如你在delegate方法
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
return 100;
}
那么你的tabelview的contentsize就是(320, 4400)
posted @ 2011-10-13 17:36 zcbbin 阅读(194) 评论(2) 编辑
UIScrollView 原理
scroll view 原理
//作者:禚来强 iphone开发q*****:79190809 邮箱:zhuolaiqiang@gmail.com转帖请保留
demo 可以到我的博客http://blog.csdn.net/diyagoanyhacker/article/list/10
在滚动过程当中,其实是在修改原点坐标
当手指触摸后, scroll view会暂时拦截触摸事件,使用一个
计时器,假如在计时器到点后,没有发生手指移动事件,
那么,scroll view发送tracking events到被点击的subview
假如在计时器到点前,发生了移动事件,那么 scroll view 取消tracking
自己发生滚动
子类可以重载touchesShouldBegin:withEvent:inContentView: 决定自己是否接收touch事件
pagingEnabled当值是YES,会自动滚动到subview的边界,默认是NO
touchesShouldCancelInContentView: 开始发送trackingmessages消息给subview的时候
调用这个方法,决定是否发送tracking messages消息到subview,假如返回NO,发送,YES则不发送
假如 canCancelContentTouches属性是NO,则不调用这个方法
来影响如何处理滚动手势
scroll view还处理缩放和平移手势
要实现缩放和平移,必须实现委托viewForZoomingInScrollView:
scrollViewDidEndZooming:withView:atScale:
两个方法,另外 maximumZoomScale和minimumZoomScale两个属性要不一样
几个属性
tracking
当touch后还没有拖动的时候,值是YES,否则NO
zoomBouncing
当内容放大到最大或者最小的时候,值是YES,否则NO
zooming
当正在缩放的时候,值是YES,否则NO
decelerating
当滚动后,手指放开,但是还在继续滚动中,这个时候是 YES,其他是NO
decelerationRate
设置手指放开后的减速率
maximumZoomScale
一个浮点数,表示能放最大的倍数
minimumZoomScale
一个浮点数,表示能缩最小的倍数
pagingEnabled
当值是YES,会自动滚动到subview的边界,默认是NO
scrollEnabled
决定是否可以滚动
delaysContentTouches
是个布尔值,当值是YES的时候,用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动,假如滚动了,那么捕捉touch-down事件,否则就不捕捉, 假如值是NO,当用户触碰, scroll view会立即触发touchesShouldBegin:withEvent:inContentView:, 默认是YES
canCancelContentTouches
当值是YES的时候,用户触碰后,然后在一定时间内没有移动,scrollView发送tracking events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView发送了touchesCancelled:withEvent: 到subview,然后scroView开始滚动
假如值是NO,scrollView发送tracking events后,就算用户移动手指,scrollView也不会滚动
contentSize
里面内容的大小,也就是可以滚动的大小,默认是0,没有滚动效果。
showsHorizontalScrollIndicator
滚动时,是否显示水平滚动条
showsVerticalScrollIndicator
滚动时,是否显示垂直滚动条
bounces
默认是yes,就是滚动超过边界,会反弹有反弹回来的效果,假如是 NO,那么滚动到达边界,那么会连忙停止
bouncesZoom
和bounces类似,区别在于,这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果,假如是NO,则到达最大或者最小的时候,立即停止
directionalLockEnabled
默认是NO, 可以在垂直和水平方向同时运动, 当值是YES, 假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动, 假如一开始是对角方向滚动,则不会禁止某个方向
indicatorStyle
滚动条的样式,基本只是设置颜色,总共3个颜色,默认,黑色的,白色的
scrollIndicatorInsets
设置滚动条的位置
4. Table View
http://www.cnblogs.com/kenshincui/p/3931948.html
5. Picker View
一.UIPickerView
1.UIPickerView的常见属性
// 数据源(用来告诉UIPickerView有多少列多少行)
@property(nonatomic,assign)id<UIPickerViewDataSource> dataSource;
// 代理(用来告诉UIPickerView每1列的每1行显示什么内容,监听UIPickerView的选择)
@property(nonatomic,assign)id<UIPickerViewDelegate> delegate;
// 是否要显示选中的指示器
@property(nonatomic) BOOL showsSelectionIndicator;
// 一共有多少列
@property(nonatomic,readonly) NSIntegernumberOfComponents;
2.UIPickerView的常见方法
// 重新刷新所有列
- (void)reloadAllComponents;
// 重新刷新第component列
- (void)reloadComponent:(NSInteger)component;
// 主动选中第component列的第row行
- (void)selectRow:(NSInteger)rowinComponent:(NSInteger)component animated:(BOOL)animated;
// 获得第component列的当前选中的行号
-(NSInteger)selectedRowInComponent:(NSInteger)component;
3.数据源方法(UIPickerViewDataSource)
// 一共有多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pickerView;
// 第component列一共有多少行
- (NSInteger)pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component;
4.代理方法(UIPickerViewDelegate)
// 第component列的宽度是多少
- (CGFloat)pickerView:(UIPickerView *)pickerViewwidthForComponent:(NSInteger)component;
// 第component列的行高是多少
- (CGFloat)pickerView:(UIPickerView *)pickerViewrowHeightForComponent:(NSInteger)component;
// 第component列第row行显示什么文字
- (NSString *)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
// 第component列第row行显示怎样的view(内容)
- (UIView *)pickerView:(UIPickerView *)pickerViewviewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView*)view;
// 选中了pickerView的第component列第row行
- (void)pickerView:(UIPickerView *)pickerViewdidSelectRow:(NSInteger)row inComponent:(NSInteger)component;
二.UIDatePicker
1.常见属性
// datePicker的显示模式
@property (nonatomic) UIDatePickerModedatePickerMode;
// 显示的区域语言
@property (nonatomic, retain)NSLocale *locale;
2.监听UIDatePicker的选择
* 因为UIDatePicker继承自UIControl,所以通过addTarget:...监听
三.程序启动的完整过程
1.main函数
2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象
3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口
3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
* 创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口