100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > ios 图片居中裁剪_iOS 根据UIImage 修改UIImageView Frame (包括截取图片中间部分)...

ios 图片居中裁剪_iOS 根据UIImage 修改UIImageView Frame (包括截取图片中间部分)...

时间:2024-04-18 01:51:04

相关推荐

ios 图片居中裁剪_iOS 根据UIImage 修改UIImageView Frame (包括截取图片中间部分)...

iOS UIImageView 根据需求调整frame

1、图片的宽和高不相等,截取图片的中间部分,截取的部分Size明确

2、图片的宽度要等于其父视图的类的宽度,然后根据宽度计算高度,保证

图片不变形,显示正常

3、图片的宽度或高度大于其父视图的类的宽的或高度,如果是宽度的问题,

就以其父视图的宽度为准,确定图片的显示宽度;如果是高度的问题,就以

其父视图的高度为准,确定图片的显示高度。

以上三种情况,具体示例依次如下:

第一种情况,调用方法:

- (void)imageLoadedFinish:(UrlImageView *)oldImageView image:(UIImage *)imageV skuInfo:(NSDictionary *)skuInfo

{

截取的目标尺寸

float

imgW =

(WIN_SIZE.width-40)/3;

//截取中间部分

oldImageView.image =

[self squareImageFromImage:imageV scaledToSize:imgW];

}

---截图操作 //截取中间部分

-

(UIImage *)squareImageFromImage:(UIImage

*)image scaledToSize:(CGFloat)newSize

{

--缩放比例

CGAffineTransform scaleTransform;

CGPoint origin;

图片大小大于图片高度的情况

if (image.size.width >

image.size.height)

{

//image原始高度为200,缩放image的高度为400pixels,所以缩放比率为2

计算缩放比例

CGFloat scaleRatio = newSize / image.size.height;

scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);

//设置绘制原始图片的画笔坐标为CGPoint(-100, 0)pixels

计算画笔的X轴

origin = CGPointMake(-(image.size.width - image.size.height) / 2.0f, 0);

} else

{

图片的高度大于宽度的情况

CGFloat scaleRatio = newSize / image.size.width;

scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);

计算画笔的Y轴

origin = CGPointMake(0, -(image.size.height - image.size.width) / 2.0f);

}

CGSize size = CGSizeMake(newSize, newSize);

//创建画板为(400x400)pixels

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])

{

UIGraphicsBeginImageContextWithOptions(size, YES, 0);

} else

{

UIGraphicsBeginImageContext(size);

}

CGContextRef context = UIGraphicsGetCurrentContext();

//将image原始图片(400x200)pixels缩放为(800x400)pixels

CGContextConcatCTM(context, scaleTransform);

//origin也会从原始(-100, 0)缩放到(-200, 0)

[image drawAtPoint:origin];

//获取缩放后剪切的image图片

image = UIGraphicsGetImageFromCurrentImageContext();

结束画板绘制

UIGraphicsEndImageContext();

return image;

}

第二种情况:

//等比例缩放

-(void)imageLoadedFinish:(UrlImageView *)oldImageView image:(UIImage *)imageV skuInfo:(NSDictionary *)skuInfo

{ 得到当前视图的frame

CGSize selfSize = self.frame.size;

得到image的frame

CGSize imageSize = imageV.size;

得到imageView 的frame

CGRect imageVRect = self.imageView.frame;

确定imageView 的宽度

imageVRect.size.width = selfSize.width;

根据宽度计算imageView 的高度

imageVRect.size.height = imageVRect.size.width*imageSize.height/imageSize.width;

//计算x,y

imageVRect.origin.x = 0;

imageVRect.origin.y = 0;

self.imageView.frame = imageVRect;

CGRect selfRect = self.frame;

selfRect.size.width = imageVRect.size.width;

selfRect.size.height = imageVRect.size.height;

self.frame = selfRect;

}

第三种情况:

//等比例缩放

(void)imageLoadedFinish:(UrlImageView *)oldImageView image:(UIImage *)imageV skuInfo:(NSDictionary *)skuInfo

{

得到当前视图的frame

CGSize selfSize = self.frame.size;

得到当前Image的frame

CGSize imageSize = imageV.size;

得到当前ImageView 的frame

CGRect imageVRect = self.imageView.frame;

image的宽度大于当前视图的宽度

if(imageSize.width > selfSize.width)

{

根据宽度计算高度,确定宽度

imageVRect.size.height = selfSize.width * imageSize.height / imageSize.width;

imageVRect.size.width = selfSize.width;

}

image的高度大于当前视图的高度

if(imageVRect.size.height > selfSize.height)

{

根据高度计算宽度,确定宽度

imageVRect.size.width = selfSize.height * imageVRect.size.width / imageVRect.size.height;

imageVRect.size.height = selfSize.height;

}

//计算x,y

imageVRect.origin.x = (selfSize.width-imageVRect.size.width)/2;

imageVRect.origin.y = (selfSize.height-imageVRect.size.height)/2;

self.imageView.frame = imageVRect;

}

ios的UIImage的两种不同的图片加载方式 tom猫

在ios的UI交互设计时,对图片的处理是难免的:不同的处理方式会对内存有不同的影响: ********************************************************* ...

iOS UIView 快速修改 frame,

在iOS开发布局修改 frame 时需要繁琐的代码实现,今天偶尔看到一播客说到快速修改的 frame 的方法,自己动手写了一遍实现代码. 快速实现主要通过 添加类目的方式,对UIView 控件添加了一 ...

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

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

iOS Webview 实现修改javascript confirm 和 alert

贴代码: @interface UIWebView (JavaScriptAlert) -(void) webView:(UIWebView *)sender runJavaScriptAlertPa ...

IOS 截取图片 部分 并生成新图片

/** * 从图片中按指定的位置大小截取图片的一部分 * * @param image UIImage image 原始的图片 * @param rect CGRect rect 要截取的区域 * * ...

ios 动画 创建一个UIImageView并将其属性设置animationImages为UIImages 的数组

NSArray *animationFrames = [NSArray arrayWithObjects: [UIImage imageWithName:@"image1.png" ...

SQL SERVER 修改数据库名称,包括物理文件名和逻辑名称

SQL SERVER 修改数据库名称,包括物理文件名和逻辑名称 原来数据库名称为 aa,物理文件名称为 aa.mdf 和 aa_log.ldf: 需要修改数据库名称为 bb,物理文件名 ...

李洪强iOS开发之-修改状态栏的字体的颜色

李洪强iOS开发之-修改状态栏的字体的颜色 修改的效果: -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [ ...

iOS开发系列-修改项目工程名

当前有项目工程名为iOS,需要修改工程名为IFLY.在修改前注意备份项目 修改项目名 出现弹框,点击Rename 修改工程目录文件名 注意Tests与UITests不要删除 选中IFLY.xcodep ...

随机推荐

概率DP

POJ 3744Scout YYF I 这就是一个乱搞题,暴力发现TLE了,然后看了看discuss里说可以矩阵加速,想了一会才想明白怎么用矩阵,分着算的啊.先算f[num[i]-1]之类的,代码太 ...

hadoop2.6---windows下开发环境搭建

一.准备插件 1.自己编译 1.1 安装Ant 官网下载Ant,apache-ant-1.9.6-bin.zip 配置环境变量,新建ANT_HOME,值是E:\apache-ant-1.9.6:PAT ...

HTTP消息中header头部信息的讲解

HTTP Request的Header信息 1.HTTP请求方式 如下表: GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并 ...

SQL多行拼接为一行

使用简单T-SQL,拼接一列多行为一行.按SQL SERVER的说法叫做自拼接(PS:区分自连接) 还有一种方法是for xml path的方式,感觉不实用. declare @Result varc ...

解决SublimeText3在GBK编码下的中文乱码问题听语音

Sublime Text 3是我最喜欢的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开GBK的代码文件,如果里面有中文的话,就会乱码 工具/ ...

iOS 中捕获截屏操作

转自:iOS知识小集 在iOS 7后,苹果提供了UIApplicationUserDidTakeScreenshotNotification通知来告诉App用户做了截屏操作.苹果的描述如下: // T ...

Excel坐标自动在AutoCad绘图_1

众所周知,Excel对数据处理的功能非常强大,它可以进行数据处理.统计分析已经辅助决策的操作,该软件已经渗透到各个领域.作为一个测绘人,GISer, 也经常利用excel完成一些测量表格的自动化计算, ...

OkHttp 同步异步操作

OkHttp是一个Java和Android的HTTP和HTTP/2的客户端,负责发送HTTP请求以及接受HTTP响应. 一.使用OkHttp OkHttp发送请求后,可以通过同步或异步地方式获取响应. ...

如何用命令行刷新,启用,禁用Magento2的缓存

当你使用Magento商店时如何刷新Magento 2中的Cache命令行是基本的常用操作.Magento 2默认有12种缓存类型.在命令行中有5个简单的命令来管理缓存.在这篇文章中,我将逐步向您展示 ...

PowerDesigner 16PDM显示备注

默认显示的列是Name及类型 name和code不支持同时显示,设置方法: Tool->Model Options->Name Convention->右侧display中选择显示n ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。