
相比于总是使用默认的 SRGB 格式的 UIGraphicsBeginImageContextWithOptions 方法,建议我们使用在 iOS 10 引入的 UIGraphicsImageRenderer 类完成绘制任务,它在 iOS 12 中会根据场景自动选择最合适的渲染格式,更加合理地使用内存。UIGraphicsImageRenderer 可以创建 UIImage 对象或者进行 JPEG/PNG 格式的编码
ImageIO 能够在不产生 dirty memory 的情况下读取到尺寸和元信息,其内存损耗等于缩减后的尺寸产生的内存占用
直通车: >
如上图,接口中的为长方形,实际则需要显示为正方形,就需要剪裁返回的数据中的上边部分
//显示的上半部分
// NSURL url = [NSURL URLWithString:@""];
// UIImage myimage = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
UIImage myimage = [UIImage imageNamed:@"actor"];
//由于返回的较大,所以先将压缩,再剪裁
NSData data = nil;
if (!UIImagePNGRepresentation(myimage)) {
data = UIImageJPEGRepresentation(myimage,01);
} else {
data = UIImagePNGRepresentation(myimage);
}
myimage = [UIImage imageWithData:data];
//首先,获取想要显示的部分的大小及位置
CGSize imgSize = myimagesize;
CGRect rect = CGRectMake(0, 0, imgSizewidth, imgSizewidth);
//然后,将此部分从中剪切出来
CGImageRef imageRef = CGImageCreateWithImageInRect([myimage CGImage], rect);
UIImage image1 = [UIImage imageWithCGImage:imageRef];
//最后,将剪切下来放入UIImageView中
[selfheadImg setImage:image1];
使用系统相册的时候,首先判断是否有权限,没有权限的话,可以d出提示框。
相册监听中的回调方法是在 子线程 中的,因此要改变UI布局的话,必须回到主线程
几个常用的类
PHAsset : 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源。每个PHAsset就是一张的详细信息,包括、位置、时间等。
PHFetchOptions : 获取资源时的参数,可以传 nil,即使用系统默认值。
PHFetchResult : 表示一系列的资源集合,也可以是相册的集合。
PHAssetCollection : 表示一个相册或者一个时刻,或者是一个智能相册(系统提供的特定的一系列相册,例如:最近删除,视频列表,收藏等等)。
PHImageManager : 用于处理资源的加载,加载的过程带有缓存处理,可以通过传入一个 PHImageRequestOptions 控制资源的输出尺寸等规格。
PHImageRequestOptions : 如上面所说,控制加载时的一系列参数。
一 App Icon
在设计iOS App Icon时,设计师不需要切圆角,直接矩形就可以。
下面是App Icon需要的尺寸和命名(尺寸和命名不做解释):
尺寸 命名
157x57 px Icon
2114x114 px Icon@2x
340x40 px Icon-40
480x80 px Icon-40@2x
5120x120 px Icon-40@3x
6120x120 px Icon-60@2x
7180x180 px Icon-60@3x
872x72 px Icon-72
9144x144 px Icon-72@2x
1076x76 px Icon-76
11152x152 px Icon-76@2x
1229x29 px Icon-Small
1358x58 px Icon-Small@2x
1487x87 px Icon-Small@3x
1550x50 px Icon-Small-50
16100x100 px Icon-Small-50@2x
二 启动页
下面是启动页需要的尺寸和命名(尺寸和命名不做解释):
尺寸 命名
1320x480 px Default
2640x960 px Default@2x
3640x1136 px Default-568h@2x
4750x1334 px LaunchImage-800-667h@2x
52208x1242 px LaunchImage-800-Landscape-736h@3x
61242x2208 px LaunchImage-800-Portrait-736h@3x
三 App内图标
我会把App内的图标分成四类进行规范设计:第一类顶部栏内的图标;第二类底部导航栏内的图标;第三类内容区域的图标;第四类d窗、浮层内的图标。
1顶部栏内的图标
在设计顶部栏内的图标时应注意,图标的高度不能超过顶部栏高度的一半。以750x1334 px的尺寸为例,顶部栏高度为88 px,图标不能超过顶部栏的一半就是44 px, 但为了页面的美观感与整体性,图标的高度最好与顶部栏标题的字高度保持一直,一般图标的高度控制在32-36 px左右。
2底部导航栏内的图标
底部导航栏内不仅只有图标,一般每个图标下都会有对应的文字,这种情况就比较复杂,因为你需要把图标距上间距、图标与文字间距、文字距下间距等因素考虑进去。图标与文字上下间距一般控制在20 px左右,文字大小在20 px左右,图标与文字间距控制在14 px范围内,最终图标的大小在40-44 px左右。 和顶部栏的原则一样,底部导航栏的图标不能超过其高度的一半,若底部导航栏高度为98 px,图标不要超过48 px, 再加上底部导航栏的文字48 px高的图标也不太合适,所以以我的经验之谈,最佳高度是44 px。
3内容区域的图标
其实仔细研究就会发现,App里的图标分为两种,一种是可点击的,一种是起修饰作用的不能点击的。可点击的图标往往比起修饰作用的图标大。我在做内容区域的图标时为了使整体的App看上去比较统一,图标的大小范围和顶部栏、底部导航栏的图标上下不超过2-4个像素,基本和文字的高度一致。可点击图标范围在32-36 px左右, 不可点击图标范围在24-28 px左右。
上述内容都是我在做App时通过自己的经验和精品的分析得来的,希望会帮助到你。但是有时个别情况也要个别分析,要活学活用。
@2x 为:for iPhone 6/5s/5/4s/4
@3x为:for iPhone6 plus
IOS各型号尺寸
APPIcon
启动设置
命名规范
一个简单的命名规范,作用就不说了~~~~
命名的组成部分:
逻辑板块(可由Tabbar来判断,如果我:My),定位到哪一个页面(personMessage),哪一个功能描述(比如说设置setting),状态(选中,高亮,不可使用,正常状态)
例:my_personMessage_setting_s 表示个人中心选项卡中的个人信息中的设置图标的选中状态。
除此之外,就是对于一下公共的:
这样效果显而易见了,当然在设计目录结构的时候也一定按照相应的层次结构进行设计,千万不要偷懒,放在同一级目录里,版本迭代多了后,你会哭的。
( >
两种缩放:
1缩放到指定大小,也就是指定的`size`
2等比缩放。
缩放到指定大小
-(UIImage)imageCompressWithSimple:(UIImage)imagescaledToSize:(CGSize)size
{
UIGraphicsBeginImageContext(size);
[imagedrawInRect:CGRectMake(0,0,sizewidth,sizeheight)];
UIImagenewImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnnewImage;
}
等比缩放
通过缩放系数
-(UIImage)imageCompressWithSimple:(UIImage)imagescale:(float)scale
{
CGSizesize=imagesize;
CGFloatwidth=sizewidth;
CGFloatheight=sizeheight;
CGFloatscaledWidth=widthscale;
CGFloatscaledHeight=heightscale;
UIGraphicsBeginImageContext(size);//thiswillcrop
[imagedrawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];
UIImagenewImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnnewImage;
}
以上就是关于iOS 图片渲染Graphics,ImageIO全部的内容,包括:iOS 图片渲染Graphics,ImageIO、iOS中获取系统相册中的图片、iOS 让imageview显示图片指定部分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)