全部 文章 问答 分享 共找到67个相关内容
[问答] 如何入门android GIS开发
android开发GIS软件该如何入门,有相关专业的前辈可以指导一下吗?
2020-02-13 16:21 · android
[文章] C++入门 书籍推荐及其他
语法推荐《EssentialC++》《C++PrimerPlus》&《C++Primer》牛客网c++入门语法编程网站入门项目TinyWebServerspdlogCPlusPlusThingsindicatorssudokudbg-macro
2023-08-23 22:43 · C++ / 入门 / 学习路线
[问答] 安卓入门课程,老师的资料打包到哪了?
安卓入门课程,老师的资料打包到哪了,各处找太麻烦了,有的软件下载起来莫名的慢。
2020-09-15 13:30 · 资源
[问答] 锯老师,什么时候出个后端项目教程,好入门java
锯老师,什么时候出个后端项目教程,好入门java
2020-04-20 23:51 · 学习
[文章] C语言入门(5)
是假时就结束循环,但有continue后,即使条件为假也执行循环.continue只对所在循环内起作用,对所在外层循环无效.break的作用是无视循循环并退出一层循环,或退出switch.switch在C语言入门
2020-02-13 02:08 · C语言入门 / 循环结构
[文章] Swift快速入门常量和变量(2)
基础入门学习任何一门语言,首先入门的应该就是变量和数据类型了。语言特性Swift可以说是一门较新的语言,苹果于2014年[WWDC]苹果开发者大会发布。
2020-09-14 22:53 · Swift
[文章] C语言入门(3)
语句使用以及注意的相关事项这节内容可能比较多,大家可以在空余时间消化练习.之前的小编没排序,现在排个序:C语言入门(1)-----最简框架C语言入门(2)-----框架解析目录1.变量的命名规则2.变量的输入输出
2020-02-03 14:53 · C语言 / 入门 / 编程
[文章] iOS从0到1开发领券联盟(目录)
先给目录放在这里,计划100篇,希望明年的这个时候全部写完吧==说明:==-1.本系列文章虽是从0到1,但是不会具体到每一个语言和编程的细节,目的是快速入门,不要求有iOS和Swift的基础,但是之前最好有一门编程语言的基础
2020-09-11 14:16 · Swift / iOS / 领券联盟
[文章] C语言入门(7)
参考一维数组(C语言入门(7))本期内容就到这里,谢谢
2020-03-14 15:40 · 一维数组 / C语言入门 / 增删查改
[文章] UIKit快速入门之UILable(2)
本次我们要实现的效果是一个类似HelloWorld的入门demo,即一个水平垂直居中的UILable。如下图:新建iOSApp按照上一节介绍的环境搭建,我们新建一个SingleViewApp。
2020-09-27 21:34 · UIKit / UILable
[文章] UIKit快速入门之UIButton(4)
作为入门练习,可以先了解一下,深入的会在实战环节进行介绍:首先创建一个新文件,选择xcode菜单,File->New->File,选择:CocoaTouchClass类型:MyButton.swift
2020-10-14 12:17 · Swift / iOS / UIKit / UIButton
[文章] java实现获取视频时长
SpringMVC\01-第一天\视频\02-SpringMVC框架的介绍.avi---D:\BaiduNetdiskDownload\javaee\07-SpringMVC\01-第一天\视频\03-入门程序之需求分析
[分享] AndroidTV开发文章推荐

萌新从入门到放弃蹲坑必读~

2022-03-04 10:26 · Android / TV / 入门
[问答] 求android交流群!!!
求android交流群,刚入门希望和大家一起学习!!!
2020-11-02 09:25 · 学习 / 交流
[问答] 想学Android逆向,求指教

目前基础入门水平:去广告,vip权限这些简单的东西

想继续深入学习,但是找不到资料,不知道该怎么精进,有过来人可以指点一下吗?

2023-04-26 16:52 · Android逆向
[问答] Android 自定义Button

有没有一些炫酷的自定义按钮资源呀,刚入门Android不知道一些免费资源去哪找2022-08-20 09:06 · Android

[文章] Nginx快速入门
Nginx概述简介Nginx(Enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,由伊戈尔·赛索耶夫开发。其将源代码以类BSD许可证的形式发布,并且因其稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。其特点是占有内存少,并发能力强。能够支持高达50,000个并发连接数的响应作用Http代理正向代理代理客户端反向代理代理服务器负载均衡负载均衡策略:内置策略轮询依次循环访问加权轮询根据服务器权重值访问IPhash对请求客户端的IP进行hash操作,根据hash结果将同一客户端的请求分发给同一台服务器进行处理,解决session不共享问题扩展策略动静分离将网站中的动态资源(数据展示)与静态资源(css\html\image\js)分离,缓存静态资源,提高资源响应速度安装网址:nginx:downloadwindows安装:下载压缩包,nginx/Windows-1.20.1解压到英文目录CMD窗口启动nginx.exe默认监听80端口Linux安装:下载压缩包,nginx-1.20.1解压执行手动安装:./configuremakemakeinstall安装目录:==usr/local/nginx==配置文件:==usr/local/nginx/conf/nginx.conf==nginx操作cd/usr/local/nginx/sbin./nginx#启动nginx./nginx-sstop#停止nginx./nginx-squit#安全退出./nginx-sreload#重新加载配置文件psaux|grepnginx#查看nginx进程实际使用nginx.conf##全局配置#usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;#最大连接数events{worker_connections1024;}#HTTP配置http{#HTTP中的全局配置includemime.types;default_typeapplication/octet-stream;sendfileon;#tcp_nopushon;#keepalive_timeout0;keepalive_timeout65;#gzipon;#负载均衡配置upstreamtest{#服务器资源weight:权重值127.0.0.1:8081weight=1;127.0.0.1:8082weight=2;}#每个服务server{listen80;#监听端口server_namelocalhost;#默认地址代理location/{roothtml;indexindex.htmlindex.htm;proxy_passhttp://test;}#代理localhost/adminlocation/admin{roothtml;indexindex.htmlindex.htm;proxy_passhttp://test;}#redirectservererrorpagestothestaticpage/50x.html#将服务器错误页面重定向到静态页面/50x.htmlerror_page500502503504/50x.html;#代理location=/50x.html{roothtml;}#HTTPSserver#代理HTTPS服务#server{#listen443ssl;#server_namelocalhost;#ssl_certificatecert.pem;#ssl_certificate_keycert.key;#ssl_session_cacheshared:SSL:1m;#ssl_session_timeout5m;#ssl_ciphersHIGH:!aNULL:!MD5;#ssl_prefer_server_cipherson;#location/{#roothtml;#indexindex.htmlindex.htm;#}#}}}
2022-07-23 15:51 · Nginx
[文章] c语言入门(1)
#C语言的最简框架#include<stdio.h>intmain(){....;....;....;printf("");return0;}##代码堆放以计算加法为例:结果就是:
2019-09-27 22:16 · 基础 / C语言入门 / 0基础学编程
[文章] 动态规划 -- 简单入门
1.斐波那契数列斐波那契数 (通常用 F(n)表示)形成的序列称为斐波那契数列。该数列由 0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1) =1F(n)=F(n-1)+F(n-2),其中n>1给定 n,请计算F(n)。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/fibonacci-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。classSolution{publicintfib(intn){if(n==0){return0;}if(n==1){return1;}returnfib(n-1)+fib(n-2);}}使用递归,计算会产生很多多余的计算,比如计算fib(7),会计算fib(6)和fib(5),而fib(6)又会去计算fib(5).使用一个数组存储计算结果,其中dp[i]表示第i项classSolution{publicintfib(intn){/*if(n==0){return0;}if(n==1){return1;}returnfib(n-1)+fib(n-2);*///如果n=4,因为是从0开始,那么数组中应该有5个数据int[]dp=newint[n+1];dp[0]=0;dp[1]=1;for(inti=2;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}returndp[n];}}也可以不用数组classSolution{publicintfib(intn){if(n==0){return0;}if(n==1){return1;}//returnfib(n-1)+fib(n-2);//如果n=4,因为是从0开始,那么数组中应该有5个数据/*int[]dp=newint[n+1];dp[0]=0;dp[1]=1;for(inti=2;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}returndp[n];*/inta=0,b=1,c=1;//分别代表第一项、第二项、结果for(inti=3;i<=n;i++){a=b;b=c;c=a+b;}returnc;}}不同路径一个机器人位于一个mxn 网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode.cn/problems/unique-paths著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。classSolution{/**初始化dp[i][j]数组dp[i][j]代表走到第i行第j列的路径,因为只能向下或者向右那么对于每个格子来说,它的值只与它的上方格子个左边格子的值有关那么:1.i=0,j>0时:dp[0][...]=12.i>0,j=0时:dp[...][0]=13.i>0,j>0时:dp[i][j]=dp[i-1][j]+dp[i][j-1]*/publicintuniquePaths(intm,intn){//初始化dp数组int[][]dp=newint[m][n];for(inti=0;i<m;i++){for(intj=0;j<n;j++){if(i==0){dp[i][j]=1;}elseif(j==0){dp[i][j]=1;}else{//进行状态转移dp[i][j]=dp[i-1][j]+dp[i][j-1];}}}returndp[m-1][n-1];}}
2022-08-05 11:21 · 算法
[文章] 阳光沙滩客户端Flutter开坑
约了几个小伙伴,用阳光沙滩来练练手(其实是他们带我,我菜鸡),如果能把阳光沙滩写完整,完成度能达到目前原生版本,基本上离开岗位上的开发也就算入门了。算是一个项目了,以后简历上面也能写。
[文章] c语言入门(2)
:::hljs-center:::框架解析上一篇我们讲了最简框架#include<stdio.h>---------1intmain()-------------------2{....;printf("");--------------------3return0;}1.#include<stdio.h>,这个的意思是包含stdio的头文件,stdio是头文件名称.3所使用的语句调用是从头文件调用的,如果头文件不包含相应的语句,编程就会出现错误.举个例子::::hljs-center:::这个strcpy是在string头文件中的一个函数运算语句,而string头文件被我划成备注,所以strcpy在这里是不能用的,在上图我们可以看见strcpy划有红色波浪线.2.intmain()这里的int,是一种数据类型.数据类型有很多种,有void,double,float,bool等等.而int代表的是实数类型,后面所提到的数据类型以后会经常用到.main是这个函数的名称,为主函数.从其名称就已经知道,它就是我们与计算机交流的一个主要窗口,程序的运行都是从这里开始的.3.{....;return0;}这是语句填充.要实现的功能都是在花括号里运算才得以实现的,比如上次的加法::::hljs-center:::在2中我们解释了main()是int类型,所以这个函数必须有一个返回值,此处返回的是0.特别注意的是,语句的句号不像我们的文字语言所用的句号(.),而是英文的分号(;)注:所用编程软件是微软的visualstdio2019community版本有兴趣的可以在微软官方下载:visualstdio2019以上就是本篇内容,谢谢.
2020-01-23 05:04 · c / 编程 / 最简框架
[文章] C语言入门(4)
选择结构目录1.顺序,选择与循环结构.2.if-else语句.3.条件运算符(?:).4.switch语句.内容1.顺序,选择与循环语句顺序,选择与循环结构是程序的三种基本结构.任何算法都可以用这三种结构表示出来.1.1顺序1.2选择1.3循环结构算法的特性1.有穷性:在合理的时间内完成.2.确定性:没有歧义(程序员的命令必须准确,不能含糊不清)3.有效性:能有效执行(负数开平方根无意义)2.if-else语句if-else是选择语句,其表达式为:if(条件表达式){符合条件后所执行的操作}else{不符合条件后所执行的操作}.符合条件即为真,否则为假.当条件表达式有多个的时候我们会加elseif语句若只执行符合条件后的语句,else可以省略不写.在这里顺便一提简单的关系运算符:3.条件运算符(?:)?:是一个三元运算符,其表达式为条件(第1元)?表达式1(第2元):表达式2(第3元)如果条件是真(符合条件),则输出表达式1的值,条件是假(不符合条件),输出表达式2的值举个例子4.switch语句switch语句也称为开关语句.常用表达式为:**注意:**后面的break是不可以省略的.如果省略的话,就会执行下一个case,知道遇到break为止;最近病毒猖狂,小伙伴们要注意身体呀,这个坎很快就会过去的.小伙伴加油,武汉加油,中国加油.以上是本期内容,谢谢
2020-02-07 00:21 · C语言入门 / 语句
[文章] C语言入门(6)
函数1.函数的定义与调用C语言提供了很多函数,比如用sqrt求平方根:(头文件:math.h)其中doubley=sqrt(x);称为"调用sqrt函数",通过调用函数求x的平方根.还有用fabs(x),求x的绝对值等等,然而函数不只有数学函数,还有很多,甚至连头文件里面都不包含的函数.因此C语言允许程序员自定义函数.函数具备三要素:函数名,函数类型,还有参数列表;格式如下:例:比较大小,返回较小.min是函数的名字,可有程序员自定义.为了提高可读性,函数名尽量浅显易懂.intx,inty位于()内,称为"参数列表".x和y代表流入min函数的值(由主函数流入到min函数里面).括号()里面的参数类型要与从主函数流入数据变量一致.在主函数中,xy是整型,那么副函数的()里面也要相对应.如果要转换类型则在副函数的{}里面修改.另外主函数的x,y的位置与副函数的参数列表位置相对应.(除主函数外我称其他函数为副函数)return后面的x或y就是返回给主函数的数值.函数的类型(int/double/void)由主函数需要返回的类型决定.例:通过副函数输出较小值,返回值为空这样我们就可以把输出交给副函数output了,输出数值不需要返回,因此函数类型可以定义为空(void)值得注意的是:函数一定要有函数类型,和函数名.但可以没有列表参数.比如生成随机数(黄色那一段):函数的调用,由上面的例可知,主函数中有接受副函数返回的值.并由副函数返回的值给新定义的数据变量赋值.在前面的例子中,你发觉主函数都在下面,副函数在主函数上面.其实这种局面可以很好改的,也应该改为主函数在开头,副函数在主函数下面.只要像下面的格式就好了:(注意符号,请仔细品)2.函数参数的值传递在红框内部的形式,我们统称为参数列表.它有两种划分,第一种就是红框内的格式,称为形式参数,第二种就是传递参数.举个例子,下图中的y与a相等吗?我们输入7和8试一下:发现y的值没有变,哎?!这种类型就是形式参数啦.形式参数,顾名思义就是在副函数走个形式,不改变本身数值.接下来说一说实际参数,也就是使用并更改函数中数据变量原来的数值.之前我们提到"&"是取地址符,在这里我们可以通过取地址符改变原来的数据变量值.以下图为例:注意观察"&"的位置,以及输出的结果.通过取地址符,我们利用副函数改变了主函数中的y值.3.数据重载与默认参数*(不要求掌握)注意:这小节我导师并没有跟我提起过,我通过看书理解的.3.1函数重载以比较大小为例,有时候我们比较大小,有整数类型的([int]1234...),有浮点类型的([double/float]1.11.41.6....),还有字符类型([char]'a''b''c'....).那么我们程序员就要写不同类型的比较函数了...比如:这就给我们程序员敲代码带来极其不便,这样写需要程序员牢记每一个函数名和功能,而区别也只是参数类型不同而已.c++允许多个函数同名,只要参数列表不同就可以了.这就是函数重载.如图:换句话说,函数的辨别是通过函数名和函数列表共同区分.但是要注意以下两点:1.形式参数的名字不能区分函数,例如intmax(intx,inty)与intmax(inta,intb)不能区分函数.2.函数返回值类型(副函数类型)也不能区分函数,例如intmax(intx)与voidmax(intx)不能区分函数.3.2函数默认参数顾名思义就是给参数列表赋初值.如果不输入x,y的值,它就用参数列表里面的值.如果只输入一个x或y的值,那么副函数就不用相应的x或y的值而使用输入的值.4.递归函数4.1递归解释.递归,简单来说就是一个函数调用一个函数,知道得出结果.(弄不好结果都没有,一直循环下去,直到死机)主要是把复杂的函数逐步简单化.就像以前讲的故事:从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事,他说啊:从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事,他说啊:从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事,他说啊:.....4.1递归函数的调用可分为两种:1,直接调用.2,间接调用.间接的我用的比较少,所以我用直接调用为例吧例如:n!=n*(n-1)(n-2)...*1这期的内容比较多(图多,细节多),希望小伙伴们能在空余时间慢慢消化.现已三月下旬,多地已经逐步复工,望小伙伴们注意身体,疫情没过去,防控不能松.以上就是本期内容,谢谢.
2020-02-22 01:05 · C语言入门 / 函数
[文章] C语言入门(8)
字符串字符串的储存与初始化1,char类型的变量只能储存单个字符,引用单个字符要使用单引号('').比如:charc1='a';//rightcharc2="a";//error!charc3='ab';charc4='';转义字符:.它不表示可见字符反斜杠,它与后面字符连起来表示一个字符。比如:charc1='\n';//表示换行的功能charc2='\t';//表示制符表功能charc3='\';//表示字符反斜杠charc4=''';//表示字符单引号多字符由单个字符组成,组成数组,称为字符串。比如:chars[100];//数组定义s[100]="hello";数组初始化,a[0]~a[5]分别是'H','e','l','l','o','\0';'\0'的作用;用来标记字符串的结束。如果数组中没有'\0',字符串数组就不会停止,操作的时候就会报错;字符数组的初始化如图:以上三种写法均可对字符数组初始化;虽然第二第三种没有敲上'\0'.但事实上它是存在于字符数组中的,一定要留多一位字符空间供'\0'使用;字符串的输入输出字符串的输入字符串输入无取地址符&由于应用程序需要经常对字符串进行输入输出操作,因此C语言的scanf,printf对字符串做了特殊处理。格式占位符为%s.比如:chara[100];scanf("%s",a);/*注意这里并不需要取地址符号!!!只有字符串不需要取地址符号,但是数组要取地址符号。*/这样的输入会自动添加'\0',程序员就不用手动添加数组后面的'\0'.字符串中scanf不接受空格字符,例如:charch[100];scanf("%s",ch);假设输入的是HelloWorld,字符串ch只能接受到"Hello"如果要接收到空格字符,可以用gets,例如:charch[100];gets(ch);字符串的输出逐个输出字符串整体输出常用的字符处理函数计算字符串的长度通常我们计算数组使用长度是这样子的:事实上C语言有处理字符串的函数,使用函数时需要在程序开头加上#include<string.h>.计算字符串长度可以这样:strlen表示计算字符串长度,str是头文件的简称,len是长度length的简称。格式:strlen(字符数组名);//求字符串长度字符串的复制两个字符串复制不能使用"="用strcpy。该注意的是,d最起码要等于s的长度。我们亦可以使用str给数组赋值:字符数组的比较strcmp(compare)比较原则:先比较首字符的ASC||码,若首字符相同,比较下一个字符的ASC||,直到“决出胜负”为止,例如:"abc">"ABC",因为首字符'a'>'A'"abc">"abC",因为前面两个相同,而'c'>'C'"abc"<"abcd",前面相同,但前面数组最后一个与后面数组的最后一个无法比较,(前无,后有)"345">"3440"数组第三个'5'>'4'例程:字符数组的连接strcat
2020-03-26 15:06 · C语言入门 / 字符串
[文章] vim入门到熟练
vim是什么Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。如何安装vimyum安装yum-yinstallvim编译安装wgetftp://ftp.vim.org/ftp/pub/vim/unix/vim-6.4-src2.tar.gztarxvfvim-6.4-src2.tar.gzcdvim-6.4-src2./configure--disable-selinux--enable-cscopemakemakeinstall3.Windows安装(GVIM)https://www.vim.org/download.php#pchttps://github.com/vim/vim-win32-installer/releasesvim的基本操作vim常规操作|命令|注释||||-|-|-|-||:setnu|设置行号||||:setnonumber|取消显示行数||||:=|查看总行数||||||||
2021-09-21 22:58 · vim / linux
[问答] maven创建javaweb 项目,连接不上数据库


最近才学的javaweb快速入门,但是前进比较难,一路上遇到了问题。

2022-09-18 03:05 · servlet / mysql / java / jdbc / druid
[文章] UIKit快速入门之UIImageView(6)
UIImageView定义iOS中,UIImageView用来展示单一的照片,或者通过轮播的方式展示一系列照片。@available(iOS2.0,*)openclassUIImageView:UIView{publicinit(image:UIImage?)@available(iOS3.0,*)publicinit(image:UIImage?,highlightedImage:UIImage?)openvarimage:UIImage?//defaultisnil@available(iOS3.0,*)openvarhighlightedImage:UIImage?//defaultisnil@available(iOS13.0,*)openvarpreferredSymbolConfiguration:UIImage.SymbolConfiguration?openvarisUserInteractionEnabled:Bool//defaultisNO@available(iOS3.0,*)openvarisHighlighted:Bool//defaultisNOopenvaranimationImages:[UIImage]?@available(iOS3.0,*)openvarhighlightedAnimationImages:[UIImage]?openvaranimationDuration:TimeIntervalopenvaranimationRepeatCount:Int@available(iOS7.0,*)openvartintColor:UIColor!openfuncstartAnimating()openfuncstopAnimating()openvarisAnimating:Bool{get}}可以看到,UIImageView继承自UIView,除了可以使用UIView的常用属性和方法外,本身定义的属性和方法非常简单。本次我们分别使用UIImageView设置背景颜色、加载本地图片、网络图片、完成图片轮播,以及设置圆角边框等功能。效果如下:设置一个背景颜色//背景颜色作为图片lazyvarimageView1:UIImageView={letimageView=UIImageView()imageView.backgroundColor=UIColor.lightGrayimageView.frame=CGRect(x:10,y:64,width:200,height:100)returnimageView}()加载本地图片//加载本地图片lazyvarimageView2:UIImageView={letimageView=UIImageView()imageView.backgroundColor=UIColor.lightGrayimageView.frame=CGRect(x:10,y:166,width:200,height:100)imageView.image=UIImage(named:"baidu")//从文件目录中获取图片//letpath=Bundle.main.path(forResource:"baidu",ofType:"png")//letfileimage=UIImage(contentsOfFile:path!)//imageView.image=fileimage//关键属性imageView.contentMode=.scaleAspectFit//边框设置imageView.layer.borderColor=UIColor.red.cgColorimageView.layer.borderWidth=2//圆角的设置imageView.layer.cornerRadius=20imageView.layer.masksToBounds=true//添加tap点击事件,重要letguester=UITapGestureRecognizer(target:self,action:#selector(ViewController.imageClicked))imageView.addGestureRecognizer(guester)imageView.isUserInteractionEnabled=truereturnimageView}()常用的设置直接看注释,都很简单。加载网络图片//加载网络图片lazyvarimageView3:UIImageView={letimageView=UIImageView()imageView.frame=CGRect(x:10,y:268,width:200,height:100)leturl=URL(string:"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png")letdata=try!Data(contentsOf:url!)imageView.image=UIImage(data:data)//边框设置imageView.layer.borderColor=UIColor.red.cgColorimageView.layer.borderWidth=2//关键属性imageView.contentMode=.scaleAspectFitreturnimageView}()设置图片轮播//图片轮播lazyvarimageView4:UIImageView={letimageView=UIImageView()imageView.frame=CGRect(x:10,y:370,width:200,height:100)//实现动画播放letimage1=UIImage(named:"baidu")letimage2=UIImage(named:"alibaba")//设置轮播的图片imageView.animationImages=[image1!,image2!]//设置图片变换持续时间imageView.animationDuration=2//开始动画imageView.startAnimating()//结束动画//imageView.stopAnimating()//边框设置imageView.layer.borderColor=UIColor.red.cgColorimageView.layer.borderWidth=2//关键属性imageView.contentMode=.scaleAspectFitreturnimageView}()设置点击事件和UILable一样,UIImageView默认不支持手势事件,可以通过设置isUserInteractionEnabled为true激活。//添加tap点击事件,重要letguester=UITapGestureRecognizer(target:self,action:#selector(ViewController.imageClicked))imageView.addGestureRecognizer(guester)imageView.isUserInteractionEnabled=truecontentMode在上述代码中,我们设置图片的显示模式时,使用了一种重要属性contentMode,其值是一个枚举值,其中有些值类似android中的android:scaleType属性效果:publicenumContentMode:Int{//默认,会对图片进行拉伸处理,充满framecasescaleToFill=0//按原图比例进行拉伸,使图片完全,不一定充满framecasescaleAspectFit=1//按原图比例填充,图片完全展示在frame中,由于使按比例充填,可能会有一部分图片看不到casescaleAspectFill=2//在尺寸变化时强制重绘,会调用setNeedsDisplaycaseredraw=3//按原比例居中显示casecenter=4//显示在imageview的上部casetop=5//显示在imageview的下部casebottom=6caseleft=7caseright=8casetopLeft=9casetopRight=10casebottomLeft=11casebottomRight=12}具体的效果,可以每个设置看一下。完整代码classViewController:UIViewController{//背景颜色作为图片lazyvarimageView1:UIImageView={letimageView=UIImageView()imageView.backgroundColor=UIColor.lightGrayimageView.frame=CGRect(x:10,y:64,width:200,height:100)returnimageView}()//加载本地图片lazyvarimageView2:UIImageView={letimageView=UIImageView()imageView.backgroundColor=UIColor.lightGrayimageView.frame=CGRect(x:10,y:166,width:200,height:100)imageView.image=UIImage(named:"baidu")//从文件目录中获取图片//letpath=Bundle.main.path(forResource:"baidu",ofType:"png")//letfileimage=UIImage(contentsOfFile:path!)//imageView.image=fileimage//关键属性imageView.contentMode=.scaleAspectFit//边框设置imageView.layer.borderColor=UIColor.red.cgColorimageView.layer.borderWidth=2//圆角的设置imageView.layer.cornerRadius=20imageView.layer.masksToBounds=true//添加tap点击事件,重要letguester=UITapGestureRecognizer(target:self,action:#selector(ViewController.imageClicked))imageView.addGestureRecognizer(guester)imageView.isUserInteractionEnabled=truereturnimageView}()//加载网络图片lazyvarimageView3:UIImageView={letimageView=UIImageView()imageView.frame=CGRect(x:10,y:268,width:200,height:100)leturl=URL(string:"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png")letdata=try!Data(contentsOf:url!)imageView.image=UIImage(data:data)//边框设置imageView.layer.borderColor=UIColor.red.cgColorimageView.layer.borderWidth=2//关键属性imageView.contentMode=.scaleAspectFitreturnimageView}()//图片轮播lazyvarimageView4:UIImageView={letimageView=UIImageView()imageView.frame=CGRect(x:10,y:370,width:200,height:100)//实现动画播放letimage1=UIImage(named:"baidu")letimage2=UIImage(named:"alibaba")//设置轮播的图片imageView.animationImages=[image1!,image2!]//设置图片变换持续时间imageView.animationDuration=2//开始动画imageView.startAnimating()//结束动画//imageView.stopAnimating()//边框设置imageView.layer.borderColor=UIColor.red.cgColorimageView.layer.borderWidth=2//关键属性imageView.contentMode=.scaleAspectFitreturnimageView}()overridefuncviewDidLoad(){super.viewDidLoad()view.addSubview(imageView1)view.addSubview(imageView2)view.addSubview(imageView3)view.addSubview(imageView4)}//点击事件处理@objcfuncimageClicked(){print("Logo点击了……………")}}
2020-10-26 15:00 · Swift / iOS / UIImageView
[文章] UIKit快速入门之UISwitch(7)
UIControl之UISwitch定义定义:Acontrolthatoffersabinarychoice,suchasOn/Off.UISwitch就是一个可切换的开关,提供两种状态,开和关。classUISwitch:UIControlUIControl从上图及定义可知,UISwitch继承自UIControl,而UIControll继承自UIView。掌握UIControll的知识,是我们后续学习UISlider、UIStepper等控件的基础。Thebaseclassforcontrols,whicharevisualelementsthatconveyaspecificactionorintentioninresponsetouserinteractions.即UIControl是控件的基类,其最主要的特征是可以相应用户的交互,如按钮的点击、按下,开关的状态切换,日期的选择等。通常UIControl类不能直接实例化,通常我们可以继承自UIControl类实现一个自定义控件,也可以继承自现有的UIController子类,并覆写其方法,以追踪用户交互的触摸事件,或检测控件状态的变化。Target-Action机制Target-ActionMechanism中文可翻译为“目标-动作”或“目标-行为”机制。其核心是,不是通过编写代码来追踪触摸事件,而是编写动作方法(actionmethods)来响应控件特定的事件。//添加值改变监听器slider.addTarget(self,action:#selector(sliderChanged(_:)),for:.valueChanged)@objcfuncsliderChanged(_sender:UISlider){print(sender.value)}例如,可以编写一个动作方法来响应UISlider滑块值的改变。当滑块滑动时,事件会被发送到控件对象中,然后再由控件对象(UISlider)去触发target(此处是self)对象上的action行为(sliderChanged方法),来最终处理滑动的事件。因此,Target-Action机制由两部分组成:即目标对象和行为Selector。目标对象指定最终处理事件的对象,而行为Selector则是处理事件的动作方法。主要通用属性varstate:UIControl.State{get}//是否可用varisEnabled:Bool{getset}//是否选中varisSelected:Bool{getset}//是否高亮varisHighlighted:Bool{getset}UIControl.Event和UIControl.State触摸事件的类型和状态。在之前的UIButton章节中已经有了介绍。UISwitch简单示例效果如下:完整代码如下,可以直接看注释:classViewController:UIViewController{lazyvarswith:UISwitch={letswith=UISwitch()//注意:虽然设置了width和height,并不能改变大小swith.frame=CGRect(x:20,y:64,width:100,height:40)swith.tintColor=UIColor.blue//开关打开时背景颜色swith.onTintColor=UIColor.green//小圆圈的颜色swith.thumbTintColor=UIColor.orange//监听swift状态改变swith.addTarget(self,action:#selector(switchChanged(_:)),for:.valueChanged)//设置默认值swith.isOn=truereturnswith}()lazyvarlable:UILabel={letlable=UILabel()lable.frame=CGRect(x:20,y:124,width:160,height:40)returnlable}()overridefuncviewDidLoad(){super.viewDidLoad()view.addSubview(swith)view.addSubview(lable)letstate=swith.isOn?"On":"Off"lable.text="当前状态:"+state}@objcfuncswitchChanged(_sender:UISwitch){print(sender.isOn)lable.text="当前状态:\(sender.isOn?"On":"Off")"}}
2020-11-03 21:34 · Swift / UIKit / UISwitch
[文章] Swift快速入门注释(1)
Playground环境搭建可以新建多个页面(NewPlaygroundPage),一个页面就是一个playground。单行和多行注释当我们新建一个Playground的时候,Xcode默认为我们生成了如下代码://:[Previous](@previous)importFoundationvarstr="Hello,playground"//:[Next](@next)其中,第一行即是注释。当Swift编译器在编译代码的时候会忽略掉你的注释。Swift中的注释和C的注释以及Java的注释基本相同。如下://这是单号注释/**这是多行注释这是多行注释*//*我是多行注释start//我是嵌套的单行注释/*我是嵌套的多行注释我是嵌套的多行注释*/我是多行注释end*/注意,和其他语言不同的是,Swift的注释,支持多行注释中嵌套注释。markup注释支持markup语法,即markdown语法//:##单行注释开启markup注释/*:#一级标题##无序列表-第一项-第二项##有序列表1.第一项2.第二项##笔记>Thisisanote---##链接[阳光沙滩](https://mp.sunofbeach.net)*//****函数描述**##函数注释,开启markup,建议使用多行-支持单行注释-支持多行注释-支持嵌套注释-支持markdown语法*/funcshowComments(){}showComments()即:单行注释以//:开启多行注释以/*:开启,而且要换一行开始写注释函数注释以多行/**开启如果要查看Markup的注释效果,可以使用菜单,“Editor->ShowRenderedMarkup”看到效果,如下:如果要查看函数的markdown注释效果,可以在光标选择函数名,按住command键,显示函数的帮助信息如下:
2020-09-12 12:10 · iOS / Swift
[文章] Kotlin基础学习2
集合的创建与遍历介绍要学习Lambda编程,集合的函数式API接口是入门Lambda的最佳案例,不过我们要先学习Kotlin中的集合。集合,对于熟悉java的人来说,不用多说了。
2020-08-06 15:15 · Kotlin / 基础
  • 1
  • 2
  • 3