当前位置:  编程技术>移动开发
本页文章导读:
    ▪关于设置UIView的背景为图片的方法以及有关问题        关于设置UIView的背景为图片的方法以及问题 本文分析对比了各种更改UIView背景的方法。当然,背景是根据一个图片来的(非纯色)。 一.加一个uiimageview在uiview上面     UIImageView* imageView = [.........
    ▪ UILabel上端对齐        UILabel顶端对齐 code中默认的UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。      比较郁闷的是,UILabel并不提供设置其垂直对齐方式的选项。所.........
    ▪ 遍历地图里面的list       遍历map里面的list private ArrayList<RstPhoto> retPhotos; private ArrayList<Restaurant> restaurants; Map<ArrayList<RstPhoto>, ArrayList<Restaurant>> map_arrary = (Map<ArrayList<RstPhoto>, ArrayList&l.........

[1]关于设置UIView的背景为图片的方法以及有关问题
    来源: 互联网  发布时间: 2014-02-18
关于设置UIView的背景为图片的方法以及问题

本文分析对比了各种更改UIView背景的方法。当然,背景是根据一个图片来的(非纯色)。

一.加一个uiimageview在uiview上面

   

UIImageView* imageView = [[UIImageView alloc] initWithFrame:view.bounds];    imageView.image = [[UIImage imageNamed:@"name.png"] stretchableImageWithLeftCapWidth:left topCapHeight:top];    
[view addSubview:imageView];

 

这种方式,如果原始图片大小不够(小于view的大小),可以拉伸,在view释放后也没有什么内存保留。

二.通过图片来生成UIColor设置view的backgroundColor

  1.imageNamed方式

  view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"name.png"]];

  2.contentOfFile方式

  NSString* path = [[NSBundle mainBundle] pathForResource:@"name" ofType:@"png"];    view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:path];

   这两种方式都会在生成color时占用大量的内存(原始图片的n倍,这个n可能会达到几千的程度)。而且如果图片大小不够,就会按照原始大小一个一个u画 过去,也就是不会自动拉伸。1和2的区别在于,view释放后,1中的color并不会跟着释放,而是一直存在于内存中(当然,再次根据这个图片生成 color时并不会再次申请内存了),而2中的color就会随着view的释放而释放。

三.quartzCore方式

UIImage *image = [UIImage imageNamed:@"name.png"];    view.layer.contents = (id) image.CGImage;    // 如果需要背景透明加上下面这句    view.layer.backgroundColor = [UIColor clearColor].CGColor;

  这种方式会自动拉伸图片,而且没有额外内存占用。

  综上,推荐第三种方式来根据图片设置背景色。

 

 
 

    
[2] UILabel上端对齐
    来源: 互联网  发布时间: 2014-02-18
UILabel顶端对齐

code中默认的UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中。

 

 


 比较郁闷的是,UILabel并不提供设置其垂直对齐方式的选项。所以如果你想让你的文字顶部对齐,那么就需要自己想办法了。

 

 stackoverflow.com 上提供了几种方法来达到顶部对齐的效果。

 

方法一:

 

在显示文字时,首先计算显示当前的文字需要多宽和多高,然后将对应的UILabel的大小改变成对应的宽度和高度。

 

该方法的代码如下:

CGSize maximumSize =CGSizeMake(300,9999);
NSString*dateString =@"The date today is January 1st, 1999";
UIFont*dateFont =[UIFont fontWithName:@"Helvetica" size:14];
CGSize dateStringSize =[dateString sizeWithFont:dateFont
constrainedToSize:maximumSize
lineBreakMode:self.dateLabel.lineBreakMode];
CGRect dateFrame =CGRectMake(10,10,300, dateStringSize.height);
self.dateLabel.frame = dateFrame;

方法二: 

 

此方法更加简单粗暴,但是很有效。其方法是在文本后面加多一些\n。

 

需要注意的是,\n后还得加至少一个空格,否则多余的\n会被UILabel忽略。从这一点上看,UILabel似乎又过于“聪明”了。

 

该方法的代码如下:

 

for(int i=0; i<newLinesToPad; i++)
self.text =[self.text stringByAppendingString:@"\n "];

 
方法三:
最正统的方法,利用objective-c的category特性,修改UILabel的绘制代码。示例代码如下:

 

// -- file: UILabel+VerticalAlign.h
#pragma mark VerticalAlign
@interfaceUILabel(VerticalAlign)
-(void)alignTop;
-(void)alignBottom;
@end

// -- file: UILabel+VerticalAlign.m
@implementationUILabel(VerticalAlign)
-(void)alignTop {
CGSize fontSize =[self.text sizeWithFont:self.font];
double finalHeight = fontSize.height *self.numberOfLines;
double finalWidth =self.frame.size.width;//expected width of label
CGSize theStringSize =[self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
int newLinesToPad =(finalHeight - theStringSize.height)/ fontSize.height;
for(int i=0; i<newLinesToPad; i++)
self.text =[self.text stringByAppendingString:@"\n "];
}

-(void)alignBottom {
CGSize fontSize =[self.text sizeWithFont:self.font];
double finalHeight = fontSize.height *self.numberOfLines;
double finalWidth =self.frame.size.width;//expected width of label
CGSize theStringSize =[self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode];
int newLinesToPad =(finalHeight - theStringSize.height)/ fontSize.height;
for(int i=0; i<newLinesToPad; i++)
self.text =[NSString stringWithFormat:@" \n%@",self.text];
}
@end

 
 

    
[3] 遍历地图里面的list
    来源: 互联网  发布时间: 2014-02-18
遍历map里面的list
    private ArrayList<RstPhoto> retPhotos;
    private ArrayList<Restaurant> restaurants;
Map<ArrayList<RstPhoto>, ArrayList<Restaurant>> map_arrary = (Map<ArrayList<RstPhoto>, ArrayList<Restaurant>>) msg.obj;
Iterator iter = map_arrary.entrySet().iterator(); 
while (iter.hasNext()) { 
	Map.Entry entry = (Map.Entry) iter.next(); 
	retPhotos = (ArrayList<RstPhoto>) entry.getKey(); 
        restaurants = (ArrayList<Restaurant>) entry.getValue(); 
 } 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法... iis7站长之家
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3