iOS入门-27图片墙
概述
做一个图片墙demo,分两个页面一个图片聚合页一个图片展示页。
涉及的知识点
- 屏幕尺寸获取
- 导航栏高度获取
- 控件尺寸,位置计算
- 视图控制器之间传值(注意三种传值方式,代码注释的很清楚了)
示例
先看图
示例代码
关于如何配置UIWindow进行适配,参看iOS的UI-04-UIWindow
先看一下工程目录结构
AppDelegate.h
#import <UIKit/UIKit.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (retain,nonatomic) UIWindow* window;@end
AppDelegate.m
#import "AppDelegate.h"
#import "VCRoot.h"@interface AppDelegate ()
@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];VCRoot* vcR = [VCRoot new];UINavigationController* nvc = [[UINavigationController alloc] initWithRootViewController:vcR];self.window.rootViewController = nvc;[self.window makeKeyAndVisible];return YES;
}
@end
VCRoot.m
#import "VCRoot.h"
#import "VCImageShow.h"@interface VCRoot ()@end@implementation VCRoot- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//导航栏不透明self.navigationController.navigationBar.translucent = NO;//视图控制器titleself.title = @"图片墙";//初始化UIScrollViewUIScrollView* sv = [UIScrollView new];//设置UIScrollView背景色为白色sv.backgroundColor = [UIColor whiteColor];//竖向滚动条隐藏掉sv.showsVerticalScrollIndicator = NO;//横向不滚动sv.alwaysBounceHorizontal = NO;//获取屏幕宽,高参数UIScreen* screen = [UIScreen mainScreen];CGSize screenSize = screen.bounds.size;CGFloat sWidth = screenSize.width;CGFloat sHeight = screenSize.height;NSLog(@"width=%f;height=%f",sWidth,sHeight);//设置UIScrollView的视图大小为屏幕大小sv.frame = CGRectMake(0, 0, sWidth, sHeight);//计算每一张图片的宽度(每一行有三张图)CGFloat imageVWidth = (sWidth-40)/3;//计算每一张图片的高度(视图宽高比为1:2)CGFloat imageVHeight = imageVWidth * 2;//设置UIScrollView的内容尺寸;(当导航栏不透明时,其下部的视图会被挤压下来)sv.contentSize = CGSizeMake(sWidth, (imageVHeight+10)*5+ [self getNavHeight]);//设置UIScrollView可以交互sv.userInteractionEnabled = YES;//创建图片控件,并添加到UIScrollView中for (int i=0; i<15; i++) {//获取图片的名称NSString* imgName = [NSString stringWithFormat:@"timg_%d.jpg",i+1];//初始化UIImageUIImage* image = [UIImage imageNamed:imgName];//初始化UIImageViewUIImageView* iv = [[UIImageView alloc] initWithImage:image];//设置图片的位置和大小(比较重要,涉及计算)iv.frame = CGRectMake(10+(i%3)*(imageVWidth+10), (i/3)*(imageVHeight+10), imageVWidth, imageVHeight);//将图片控件添加到滚动控件中[sv addSubview:iv];//给每个图片控件加个点击事件//设置图片控件可响应触碰事件iv.userInteractionEnabled = YES;//初始化点击事件接收器UITapGestureRecognizer* tapGS = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImg:)];//设置点击次数为1次tapGS.numberOfTapsRequired = 1;//设置触碰点为1个tapGS.numberOfTouchesRequired = 1;//给图片控件添加点击事件监听[iv addGestureRecognizer:tapGS];//给图片控件设置tag(注意拼接方式)iv.tag = 101 + i;}[self.view addSubview:sv];
}//第一种方式
//-(void) selectImg :(UITapGestureRecognizer*) tapGs{
// NSLog(@"选中了一张图片");
//
// //点击的图片视图对象
// UIImageView* imgView = tapGs.view;
// //创建显示图片的视图控制器
// VCImageShow* vcImgShow = [VCImageShow new];
//
// //传递视图对象(不可取)
// vcImgShow.imgView = imgView;
// //跳转
// [self.navigationController pushViewController:vcImgShow animated:YES];
//}//第二种方式
//-(void) selectImg :(UITapGestureRecognizer*) tapGs{
// NSLog(@"选中了一张图片");
//
// //点击的图片视图对象
// UIImageView* imgView = tapGs.view;
// //创建显示图片的视图控制器
// VCImageShow* vcImgShow = [VCImageShow new];
// //传递视图内容对象(可取)
// vcImgShow.image = imgView.image;
// //跳转
// [self.navigationController pushViewController:vcImgShow animated:YES];
//}//第三种方式
-(void) selectImg :(UITapGestureRecognizer*) tapGs{NSLog(@"选中了一张图片");//点击的图片视图对象UIImageView* imgView = tapGs.view;//创建显示图片的视图控制器VCImageShow* vcImgShow = [VCImageShow new];//传递tagvcImgShow.imgTag = imgView.tag;//跳转[self.navigationController pushViewController:vcImgShow animated:YES];
}//获取导航栏高度
-(CGFloat) getNavHeight{CGFloat h = self.navigationController.navigationBar.frame.size.height ;NSLog(@"navheight==%f",h);return h;
}@end
VCImageShow.h
#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface VCImageShow : UIViewController
//图像视图tag
@property (nonatomic,assign) NSUInteger imgTag;
//图像视图对象
@property (nonatomic,retain) UIImage* image;
//图像视图控件对象
@property (nonatomic,retain) UIImageView* imgView;@endNS_ASSUME_NONNULL_END
VCImageShow.m
#import "VCImageShow.h"@interface VCImageShow ()@end@implementation VCImageShow- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.title = @"图片展示";//获取屏幕宽高尺寸CGFloat width = [UIScreen mainScreen].bounds.size.width;CGFloat height = [UIScreen mainScreen].bounds.size.height;//第一种方式(不可取)
// //设置图片视图的大小为屏幕大小(全屏)
// _imgView.frame = CGRectMake(0, 0, width, height);//第二种方式(可取)
// _imgView = [UIImageView new];
// //设置图片视图的大小为屏幕大小(全屏)
// _imgView.frame = CGRectMake(0, 0, width, height);
//
// //图片控件实例添加图片视图对象
// _imgView.image = _image;//第三种方式_imgView = [UIImageView new];//设置图片视图的大小为屏幕大小(全屏)_imgView.frame = CGRectMake(0, 0, width, height);_imgView.image = [UIImage imageNamed:[NSString stringWithFormat:@"timg_%d.jpg",_imgTag-100]];//一个视图对象只能有一个根视图//当把视图添加到新父视图上之后旧的父视图中就会删除掉[self.view addSubview:_imgView];
}
@end
iOS入门-27图片墙相关推荐
- 老司机 iOS 周报 #27 | 2018-07-16
老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...
- 一键拼出你的微信好友图片墙!
点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自高级农民工,禁二次转载 上午发了张微信近 2000 位好友的头像拼图,让大伙儿 ...
- 按钮图片拉伸_图片墙有多香?高手都在用的PPT封面制作技巧!
大家好,我是李导~ 这次,冬天是真的来了,不知道大家有没有感觉,每次冷空气真正袭来之前我们都会以为今年是个暖冬,结果突然有一天气温从20度直降到个位数,我们都会认为今年比以往的冬天都冷. 但是,再冷的 ...
- itchat 保存好友信息以及生成好友头像图片墙
2019 第 41 篇,总第 65 篇文章 本文大约 4000 字,阅读大约需要 12 分钟 最近简单运用 itchat 这个库来实现一些简单的应用,主要包括以下几个应用: 统计保存好友的数量和信息 ...
- iOS 入门——Hello World app
iOS 入门--Hello World app 作为Mac重度使用者以及iOS小白一枚(匿),我将为iOS 10 构建我们的第一个iOS应用程序 (著名的"Hello World" ...
- 制作关于计算机的ppt图片,10步教你制作图片墙PPT封面
PPT封面设计相信对于很多朋友们来说,一直都是比较头疼的问题.很多朋友在PPT封面时,尤其是PPT图片墙封面时往往得不到其中的设计要领. (电脑入门到精通网 www.58116.cn) 图片墙,是由不 ...
- iOS入门指引系列(零)
俗话说的是,万事开头难. 意思是开了头,再把一件事办下去就没有那么难了. 我相信每一个人当想入门一项新技能的时候都有这样的体会吧.特别是现在网络上各式各样的学习资料,文章,这些零星的资料反而让初学者迷 ...
- 一键拼出你的微信好友图片墙
上午发了张微信近 2000 位好友的头像拼图,让大伙儿看能不能快速找到自己的头像,没想到反响很强烈,引得阵阵惊呼与膜拜,没有料到. 有没有犯密集恐惧症?这并不震撼,如果你有 5000 位好友的话,做出 ...
- python代码图片头像_60行Python代码一键拼出你的微信好友图片墙!
原标题:60行Python代码一键拼出你的微信好友图片墙! 源 /高级农民工文 /苏克1900 近 2000 位好友的头像拼图,有没有犯密集恐惧症?这并不震撼,如果你有 5000 位好友的话,做出来的 ...
最新文章
- linux下使用expect+scp+shell实现分布式集群系统安装,升级,部署
- redis开启外网访问
- spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持
- Perl BEGIN块和END块
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-通过SQL实现特殊业务...
- C++ 判断字符串是否全是数字
- 为什么说图形数据库是大数据时代的利器?
- 【简单】基于springboot的学生在线考试系统【老师、学生、管理员】
- 前端实现下载文件-js实现a标签下载
- 关于csv文件最大行数和最大列数
- 虹科新品 | 需要进行高功率,大规模的测试控制?这款5A功率高密度继电器模块你一定不能错过!
- 物理 常见力与牛顿三定律
- 【已解决】你遇到过windows更新之后,输入法突然不好用的情况吗?
- 第五部分 3D环绕声技术
- 知识点滴 - 关于苹果认证MFI
- 利用Python去除图片水印,真的一点都不难!
- 第四章 变形-学习笔记+练习题
- Eth-Trunk(链路聚合)之负载分担模式
- 对DTI进行概率追踪(Probability tracking)(使用的是PANDA工具)
- linux镜像文件目录,Linux - 系统 - 文件目录
热门文章
- hive sql 转化为 MR 的流程博客
- redirect_uri 域名与后台配置不一致 10003
- 使用C语言和DX库编写东方风格的STG射击游戏--------前言
- 电信用户流失预测案例(1)
- rtx2060为什么叫智商卡_为什么有的卡叫储蓄卡,有的卡叫借记卡呢?看完你就懂了...
- 诺基亚6升级+Android8,诺基亚6.2喜迎Android10操作系统更新
- Java多线程游戏仿真实例分享
- 极路由3 = B50
- 【Win10 Tips】Win10自带输入法简体繁体切换快捷键
- 桌面计算机怎么设置时钟同步,win10怎样设置电脑时间同步