关于UIImageView的显示问题

关于UIImageView的显示问题——居中显示或者截取图片的中间部分显示

发表回复

我们都知道在ios中,每一个UIImageView都有他的frame大小,但是如果图片的大小和这个frame的大小不符合的时候会怎么样呢?在默认情况,图片会被压缩或者拉伸以填满整个区域。

通过查看UIView的属性可以知道,view的contentMode属性可以用来控制图片的显示情况。下面的设置可以让图片进行居中显示。

1 imageView.contentMode
=  UIViewContentModeCenter;

这个居中是包括了,横向和纵向都是居中。图片不会拉伸或者压缩,就是按照imageView的frame和图片的大小来居中显示的。

这里有两种情况:

1、图片比view的区域更大。这个时候会截取图片的中间部位显示在frame区域里面。

2、图片比view的区域更小。这个时候图片会完整的显示在frame的中间位置。

如果在默认情况,图片的多出来的部分还是会显示屏幕上。如果不希望超过frame的区域显示在屏幕上要设置。clipsToBounds属性。

1 imageView.clipsToBounds 
= YES;

最后一个问题,在iphone的retina屏幕上面,必须要设置,contentScaleFactor属性。这个属性的默认值是1。二对应的retina屏幕需要是2.可以通过下面的方式来设置:

1 [imageView
setContentScaleFactor:[[UIScreen mainScreen] scale]];

 

但是用:

1 imageView.contentMode
=  UIViewContentModeCenter;

也有他的问题,就是在图片不规则的时候,而且图片的宽或者高比frame的宽高更小的时候,会出现空白的情况。

为了解决这种问题可以设置:

1 imageView.contentMode
=  UIViewContentModeScaleAspectFill;

这样图片会拉伸或者压缩以适应frame的边界,而且是适应更小的边,这样可以达成的效果是,图片适应最小的边铺开显示,更大的边会超出frame,如果设置了clipsToBounds属性为YES,那么更大的边就会被截断。这样达成更好的居中显示效果,完整的代码如下:

1 UIImage
*pic = [ UIImage imageNamed:@
"IMG_0404.PNG"];
2 UIImageView
*imageView   = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 240, 100 )];
3 [imageView
setImage:pic];
4 [imageView
setContentScaleFactor:[[UIScreen mainScreen] scale]];
5 imageView.contentMode
=  UIViewContentModeScaleAspectFill;
6 imageView.autoresizingMask
= UIViewAutoresizingFlexibleHeight;
7 imageView.clipsToBounds 
= YES;
时间: 2024-10-27 15:37:29

关于UIImageView的显示问题的相关文章

使用UIWebView中html标签显示富文本

使用UIWebView中html标签显示富文本 用UIWebView来渲染文本并期望达到富文本的效果开销很大哦!   Work 本人此处直接加载自定义字体"新蒂小丸子体",源码不公开,望见谅. 代码如下: 渲染后效果如下图所示,效果是不是挺不错的呢. 我们再把尽头两个字渲染成红色试试. 源码: - (void)viewDidLoad { [super viewDidLoad]; // 注册字体 REGISTER_FONT(bundleFont(@"XinDiXiaoWanZi

ios-在tabBar中共享两个ViewController的UIImageView

问题描述 在tabBar中共享两个ViewController的UIImageView 应用的UITabBarController,建立了一个masterVC类,全部ViewControllers都继承masterVC.我希望能设置一个UIImageView可以显示在tabBarController每个view中的image. 如果我能实例化每个VC,就能将图片当做属性传递,但是在tabBarController的ViewController中没有这样的方法 我现在想到的方法是这样的: -(vo

重写UIImageView的image属性

重写UIImageView的image属性   效果: 当你重写了UIImageView的image属性后你就会对UIImageView怎么显示图片了如指掌了:)   源码: UIImageView.h  +  UIImageView.m // // LiveImageView.h // Progress // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <UIKit/UIKit.h> @interface LiveI

ios-UItableview 没有显示预期图片

问题描述 UItableview 没有显示预期图片 tableview delegate不显示图片.在UIImageView 中显示就正常.tableView来自界面生成器 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { [tableView setDelegate:self]; [tableView setDataSource:sel

ios-ImageView没有实现预期功能

问题描述 ImageView没有实现预期功能 做了一个功能,实现循环图片(1.png, 2.png, 3.png, 4.png, 5.png)在UIImageView中显示. 在加载网页时我希望imageView能进行循环,作为一个加载图标. 但是没成功,什么也没显示.请高手帮忙. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ for(int c = 1; !webviewLoad

优化iOS程序性能的二十五个方法

1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你管理retain和release的过程,所以你就不必去手动干预了.忘掉代码段结尾的release简直像记得吃饭一样简单.而ARC会自动在底层为你做这些工作.除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存. 现在所有的iOS程序都用ARC了,这条可以忽略. 2. 在

iOS开发系列--无限循环的图片浏览器

概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前很有必要说一下UIView的内容.在上一篇

iOS应用性能调优的25个建议和技巧

本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你也很容易在做出选择时忘记考虑性能影响.

iOS开发之Quartz2D

1.         Quartz2D概述及作用 Quartz2D的API是纯C语言的,Quartz2D的API来自于Core Graphics框架.   数据类型和函数基本都以CG作为前缀,比如: CGContextRef CGPathRef CGContextStrokePath(ctx); -- Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统. Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等: 绘制文字: 绘制\生成图片(图像): 读取\生成