IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

时间:2022-11-05 15:21:17

编写一个如下界面,实现:

1、在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中。

2、点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload目录下,并按序号命名。

3、在文本框输入完成之后点击其他地方,键盘自动消失。

准备工作:

1、输入的URL有可能是http而非https,需要在Info.plist中添加如下代码:

    <key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

添加之后,Info.plist如下:

IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

接下来是代码,代码全部写在UIViewController的.m文件中:

 #import "ViewController.h"

 @interface ViewController (){
// 定于全局变量
UIButton *btnDownLoad;
UIButton *btndisplay;
UIImageView *imageView;
UITextField *textFieldinputUrl;
NSData *imagedata;
NSString *newpath;
int count; } @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // 显示图片按钮初始化及加载
// 初始化为圆角矩形按钮
btndisplay = [UIButton buttonWithType:UIButtonTypeRoundedRect];
// 设置按钮的位置,大小
btndisplay.frame = CGRectMake(, , , );
// 设置按钮背景色
btndisplay.backgroundColor = [UIColor colorWithRed:0.512 green:0.562 blue:0.943 alpha:1.000];
// 设置按钮文本颜色及文本内容
[btndisplay setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btndisplay setTitle:@"显示图片" forState:UIControlStateNormal] ;
// 给按钮添加显示图片事件
[btndisplay addTarget:self action:@selector(display:) forControlEvents:UIControlEventTouchUpInside];
// 把按钮加载到view上
[self.view addSubview:btndisplay]; // 下载图片按钮初始化及加载
btnDownLoad = [[UIButton alloc]initWithFrame:CGRectMake(, , , )];
btnDownLoad.backgroundColor = [UIColor colorWithRed:0.512 green:0.562 blue:0.943 alpha:1.000];
[btnDownLoad setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btnDownLoad setTitle:@"下载图片" forState:UIControlStateNormal] ;
[btnDownLoad addTarget:self action:@selector(download:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnDownLoad]; // 设置URL输入框
// 初始化文本输入框及背景色设置
textFieldinputUrl = [[UITextField alloc]initWithFrame:CGRectMake(, , , )];
textFieldinputUrl.backgroundColor = [UIColor colorWithRed:0.653 green:1.000 blue:0.919 alpha:1.000];
// 设置文本输入前提示水印
textFieldinputUrl.placeholder = @"请输入图片地址";
// 设置文本输入框中消除按钮
textFieldinputUrl.clearButtonMode = UITextFieldViewModeAlways;
// 把文本输入框加载到View
[self.view addSubview:textFieldinputUrl]; // 设置图片控件
imageView = [[UIImageView alloc]initWithFrame:CGRectMake(, , , )];
imageView.backgroundColor = [UIColor grayColor];
[self.view addSubview:imageView]; // 获取沙盒中document的路径
NSString *dictpath = [NSString stringWithFormat:@"%@/Documents",NSHomeDirectory()];
// 创造一个字符串指向document中的要新建的download文件夹
newpath =[NSString stringWithFormat:@"%@/download",dictpath];
// 在document中新建download文件夹
[[NSFileManager defaultManager]createDirectoryAtPath:newpath withIntermediateDirectories:YES attributes:nil error:nil]; NSLog(@"%@",dictpath);
} //显示图片
-(void)display:(id)sender{ // 把文本框输入的URL转换成数据
NSURL *imageurl = [NSURL URLWithString:textFieldinputUrl.text];
imagedata = [NSData dataWithContentsOfURL:imageurl];
// 把数据转换成图片
UIImage *image = [UIImage imageWithData:imagedata];
// 转换的图片给UIImageView显示
imageView.image =image; } //下载图片
-(void)download:(id)sender{
count++;
// 在路径下新建图片文件
NSString *newfilepath = [NSString stringWithFormat:@"%@/%d.jpg",newpath,count];
// 把图片数据保存在路径下新建好的文件中
[[NSFileManager defaultManager]createFileAtPath:newfilepath contents:imagedata attributes:nil];
} //输入结束后让键盘滚蛋
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[textFieldinputUrl resignFirstResponder];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

最终输入URL点击显示图片之后显示:

IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

点击下载图片之后,在手机中本软件的路径下:

IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

需要注意的地方有:

1、文本框在输入完后,我们点击文本框之外的其他地方,键盘如何消失:

 //输入结束后让键盘滚蛋
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[textFieldinputUrl resignFirstResponder];
}

2、下载图片时如何自动为图片命名:定义一个全局变量用来计算点击下载图片按钮的次数,然后根据次数为图片命名,可保证不重名。然后生成格式化字符串作为下载后图片的名字:

 //下载图片
-(void)download:(id)sender{
count++;
// 在路径下新建图片文件
看集 NSString *newfilepath = [NSString stringWithFormat:@"%@/%d.jpg",newpath,count];
// 把图片数据保存在路径下新建好的文件中
[[NSFileManager defaultManager]createFileAtPath:newfilepath contents:imagedata attributes:nil];
}

IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)的更多相关文章

  1. 李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片

     李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片  源码:  // //  ViewController.m //  08-九宫格扩展 // //  Created by 李洪强 ...

  2. iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View

    一.自定义构造方法 有时候需要快速创建对象,可以自定义构造方法 + (instancetype)shopView { return [[self alloc] init]; } - (instance ...

  3. iOS开发UI篇—UIScrollView控件实现图片缩放功能

    iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...

  4. iOS开发UI篇—Quartz2D使用(图片剪切)

    iOS开发UI篇—Quartz2D使用(图片剪切) 一.使用Quartz2D完成图片剪切 1.把图片显示在自定义的view中 先把图片绘制到view上.按照原始大小,把图片绘制到一个点上. 代码: - ...

  5. 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播

    原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 ...

  6. iOS开发UI篇—UIScrollView控件实现图片轮播

    iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: #import "YYV ...

  7. iOS开发UI篇—CAlayer&lpar;创建图层&rpar;

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

  8. iOS开发UI篇—CALayer简介

    iOS开发UI篇—CALayer简介   一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...

  9. iOS开发UI篇—核心动画&lpar;UIView封装动画&rpar;

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

  10. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

随机推荐

  1. Oracle REGEXP&lowbar;SUBSTR()

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)       _ ...

  2. UIPanGestureRecognizer

    http://blog.csdn.net/huifeidexin_1/article/details/8282035 UIGestureRecognizer是一个定义基本手势的抽象类,具体什么手势,在 ...

  3. Qt 子窗口内嵌到父窗口中(无边框附体show即可)good

    有时需要把一个子窗口内嵌进入父窗口当中. 我们可以这样做 1.新建一个QWidget 或者QDialog的子类 ClassA(父类为ClassB) 2.在新建类的构造函数中添加设置窗口属性 setWi ...

  4. 拓扑图弹力布局呈现Flickr图片搜索结果:智能创新

    十年前有值得分享的图片我都存在Flickr上,可惜yahoo收购了Flickr之后堕落​好多年,最近yahoo在梅姐带领下Flickr团队终于恢复了生机,个人免费存储空间扩充到了1T,界面用户体验也有 ...

  5. Cpp Generals 1&period;2

    原文链接https://www.cnblogs.com/zhouzhendong/p/Cpp-Generals.html 源码暂不公开 下载链接 适用系统: Windows: 运行时请在进入彩色界面之 ...

  6. &lbrack;Android&rsqb; ACTION&lowbar;GET&lowbar;CONTENT与ACTION&lowbar;PICK的区别

    参考:AndroidSDK/docs/reference/android/content/Intent 看到相关代码,对这两个参数的区别有点搞不清. 原文地址请保留http://www.cnblogs ...

  7. MongoDB入门 和nodejs操作

    简介 MongoDB 开源,高性能的NoSQL数据库:支持索引.集群.复制和故障转移.各种语言的驱动程序:高伸缩性: NoSQL毕竟还处于发展阶段,也有说它的各种问题的:http://coolshel ...

  8. 未能在当前目标框架中解析主引用&OpenCurlyDoubleQuote;System&period;Net&period;Http”,它是一个框架程序集。&OpenCurlyDoubleQuote;&period;NETFramework&comma;Version&equals;v4&period;0”。若要解决此问题,请移除引用&OpenCurlyDoubleQuote;System&period;Net&period;Http”,或将应用程序的目标重新指向包含&OpenCurlyDoubleQuote;System&period;Net&period;Http”的框架版本。&Tab;Zephyr&period;Web

    解决方法:升级项目到.net framework 4.5

  9. Map和Bean的相互转换

    Map和Bean的相互转换 BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下: 完整方法: BeanUtil ...

  10. NorFlash、NandFlash、eMMC比较区别

    快闪存储器(英语:Flash Memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器.这种科技主要用于一般性数据存储,以及在电脑与其他数字产品间交换传输数据,如储存 ...