DJStatusPhotoView.m

  1. #import "DJStatusPhotoView.h"
  2. #import "UIImageView+WebCache.h"
  3. #import "DJPhoto.h"
  4.  
  5. @interface DJStatusPhotoView()
  6.  
  7. // GIF标记
  8. @property (nonatomic,weak) UIImageView *gifView;
  9.  
  10. @end
  11.  
  12. @implementation DJStatusPhotoView
  13.  
  14. - (instancetype)initWithFrame:(CGRect)frame
  15. {
  16. self = [super initWithFrame:frame];
  17. if (self) {
  18.  
  19. // typedef NS_ENUM(NSInteger, UIViewContentMode) {
  20. // UIViewContentModeScaleToFill, // 默认值,拉伸并填充到整个ImageView,可能变形
  21. // UIViewContentModeScaleAspectFit, // 拉伸至完全显示在imageView里面,不会变形
  22. // UIViewContentModeScaleAspectFill, // 【推荐使用!!!】拉伸至图片的宽度等于imageView的宽度或高度为止
  23. // UIViewContentModeRedraw, // 不常用,当调用setNeedsDisplay的时候,会重绘图片
  24. // UIViewContentModeCenter, // 居中显示,不会拉伸
  25. // UIViewContentModeTop,
  26. // UIViewContentModeBottom,
  27. // UIViewContentModeLeft,
  28. // UIViewContentModeRight,
  29. // UIViewContentModeTopLeft,
  30. // UIViewContentModeTopRight,
  31. // UIViewContentModeBottomLeft,
  32. // UIViewContentModeBottomRight,
  33. // };
  34. //
  35. //
  36. // // self.clipsToBounds 超出边框的部分会剪掉,通常与AspectFill配合使用
  37. //
  38. // // 规律:
  39. // // 1. 凡是带有scale单词的,图片都会拉伸
  40. // // 2. 凡是带有Aspect单词的,图片都会保持原来的宽高比,图片不会变形
  41.  
  42. self.contentMode = UIViewContentModeScaleAspectFill;
  43. self.clipsToBounds = YES;
  44. }
  45. return self;
  46. }
  47.  
  48. - (UIImageView *)gifView {
  49.  
  50. if (!_gifView) {
  51. UIImage *gifImage = [UIImage imageNamed:@"timeline_image_gif"];
  52. UIImageView *gifView = [[UIImageView alloc] initWithImage:gifImage];
  53. [self addSubview:gifView];
  54. _gifView = gifView;
  55. }
  56. return _gifView;
  57. }
  58.  
  59. - (void)setPhoto:(DJPhoto *)photo {
  60.  
  61. _photo = photo;
  62.  
  63. // 取得缩略图对应的中型图片
  64. NSString *photo_image_url = photo.thumbnail_pic;
  65. photo_image_url = [photo_image_url stringByReplacingOccurrencesOfString:@"thumbnail" withString:@"bmiddle"];
  66.  
  67. // 设置显示图片
  68. [self sd_setImageWithURL:[NSURL URLWithString:photo_image_url] placeholderImage:[UIImage imageNamed:@"timeline_image_placeholder"]];
  69.  
  70. // 根据图片类型判断是否显示GIF标记(注意cell会重复利用)
  71. self.gifView.hidden = ![photo.thumbnail_pic.lowercaseString hasSuffix:@"gif"];
  72.  
  73. DJLog(@"%@",photo.thumbnail_pic);
  74.  
  75. }
  76.  
  77. // 调整gifView的位置(由于使用的是initWithImage创建,所以gifView有宽和高,因此只需要设置x,y值即可)
  78. - (void)layoutSubviews {
  79.  
  80. [super layoutSubviews];
  81. self.gifView.x = self.width - self.gifView.width;
  82. self.gifView.y = self.height - self.gifView.height;
  83.  
  84. }
  85.  
  86. @end

最终效果:

新浪微博客户端(32)-设置相册图片的contentMode的更多相关文章

  1. 新浪微博客户端(31)-显示相册图片上的GIF标记

    DJStatusPhotoView.h #import <UIKit/UIKit.h> @class DJPhoto; @interface DJStatusPhotoView : UII ...

  2. Android应用--新浪微博客户端新特性滚动视图和启动界面实现

    新浪微博客户端新特性滚动视图和启动界面实现 2013年8月20日新浪微博客户端开发之启动界面实现 前言: 使用过新浪微博客户端的童鞋都清楚,客户端每一次升级之后第一次启动界面就会有新特性的介绍,用户通 ...

  3. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  4. android开发新浪微博客户端 完整攻略 [新手必读]

    开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就 ...

  5. android 新浪微博客户端的表情功能的实现

    这是一篇好文章,我转来收藏,技术的最高境界是分享. 最近在搞android 新浪微博客户端,有一些心得分享弄android客户端表情功能可以用以下思路1.首页把新浪的表情下载到本地一文件夹种,表情图片 ...

  6. 使用JS调用手机本地摄像头或者相册图片识别二维码/条形码

    接着昨天的需求,不过这次不依赖微信,使用纯js唤醒手机本地摄像头或者选择手机相册图片,识别其中的二维码或者是条形码.昨天,我使用微信扫一扫识别,效果超棒的.不过如果依赖微信的话,又怎么实现呢,这里介绍 ...

  7. iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK

    iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言:    今天给大家 ...

  8. Android 仿微信朋友圈发动态功能(相册图片多选)

    代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...

  9. 基于H5+ API手机相册图片压缩上传

    // 母函数 function App(){} /** * 图片压缩,默认同比例压缩 * @param {Object} path * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照 ...

随机推荐

  1. Qt——树的搜索

    一.Qt中的树 Qt中树的实现有两种方式.第一种是使用Qt提供的QTreeWidget,很多函数都封装好,比较方便:另一种是通过QTreeView实现,设置它的数据模型,比如使用QStandardIt ...

  2. gunzip 和 unzip 解压文件到指定的目录

    Linux 常用的压缩命令有 gzip 和 zip,两种压缩包的结尾不同:zip 压缩的后文件是 *.zip ,而 gzip 压缩后的文件 *.gz  相应的解压缩命令则是 gunzip 和 unzi ...

  3. dxut.h(29): fatal error C1083: Cannot open include file: 'dxsdkver.h': No such file or directory

    从网上download一个三维演示模型的软件编译发现报找不到dxsdkver.h文件,网上查阅这是MS的DirectX sdk中的库文件,于是先download DirectX SDK 安装之后,配置 ...

  4. [CareerCup] 12.4 Test a Webpage 测试一个网页

    12.4 How would you load test a webpage without using any test tools? 这道题问我们如何不用任何测试工具来加载测试一个网页.加载测试可 ...

  5. LeetCode Question Difficulty Distribution

    参考链接:https://docs.google.com/spreadsheet/pub?key=0Aqt--%20wSNYfuxdGxQWVFsOGdVVWxQRlNUVXZTdEpOeEE& ...

  6. LeetCode:Word Break(DP)

    题目地址:http://oj.leetcode.com/problems/word-break/ 简单的动态规划问题,采用自顶向下的备忘录方法,代码如下: class Solution { publi ...

  7. 八款Android 开发者必备的小工具

    Photo from https://www.airpair.com 在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大 ...

  8. 20.C#LINQ基础和简单使用(十一章11.1-11.2)

    终于看到了第11章,之前虽然也有看过,但没有太仔细,在工作中也偶尔会使用,但不明白其中的原理,那现在就来讲讲LINQ,做一做书虫~~ 首先先了解下LINQ的三个要点: LINQ不能把非常复杂的查询表达 ...

  9. angularJS中-$route路由-$http(ajax)的使用

    后台请求使用的是nodeJS驱动(后面帖代码),很简单的RESTFUL, 页面使用的是bottstarp3.0(懒人神器); 第一个例子: 在本地架设NODEJS, angular的所有请求都是请求本 ...

  10. [转]不再以讹传讹,GET和POST的真正区别

    原文地址:http://www.nowamagic.net/librarys/veda/detail/1919 如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个 ...