![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS-UI成长之路
靠近星星的太阳
一专多能、刻意练习、终身成长。
展开
-
iOS开发-Status Bar设置汇总
Status bar 状态栏的隐藏1. Info.plist 设置状态栏的全局隐藏在Info.plist中添加Status bar is initially hidden设置为YES,隐藏LunchScreen(启动界面)的状态栏。在 Info.plist中添加 View controller-based status bar appearance 设置为 NO,隐藏...原创 2020-04-09 17:54:26 · 1525 阅读 · 0 评论 -
iOS开发-iPhone屏幕尺寸以及状态、导航和标签栏高度整理
手机型号 屏幕尺寸 屏幕密度 开发尺寸 像素尺寸 倍图 状态栏高(pt) 导航栏高(pt) 标签栏高(pt) XR/11 6.1 inch 326 ppi 414*896 pt 828*1792 px @2x 44 44 49 XS Max/11 Pro Max 6.5 inch 4...原创 2020-03-05 14:52:54 · 4166 阅读 · 0 评论 -
iOS开发-复制UIView(包括它的所有属性)
在某些效果中,我们需要在当前视图上创建一个新的、一样的视图,并且叠在老的上面,然后让新的视图移动、缩放,或什么的,这样做出来的动画看起来比较流畅。对于简单的界面,我们可能按原有的样子重写一个新的就好,但对于复杂的界面,有没有更好更通用的办法呢?UIView无法通过copy来创建一个新副本,这个大家都已经试过了。而UIView是遵守NSCoding协议的,这样它才能从Xib中反序列化出来...原创 2019-11-25 18:04:35 · 1462 阅读 · 1 评论 -
iOS-image图片旋转方向
最近在做项目的时候发现资源包内的图片的方向不对,但也不想让UI切一个新图,所以需要将原有的图片改变其方向。UIImage *backImage = [UIImage imageNamed:@"图片名字"];//改变该图片的方向backImage = [UIImage imageWithCGImage:backImage.CGImage ...原创 2019-01-04 14:45:11 · 10081 阅读 · 0 评论 -
iOS-纯代码自定义view的创建和封装
本文仅使用纯代码方式去创建和封装自定义View。自定义view的基本步骤重写-(instancetype)initWithFrame:(CGRect)frame方法,添加子控件 -(instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { //在这添加...原创 2018-11-14 01:40:02 · 1840 阅读 · 3 评论 -
iOS-支付密码插件
仿支付宝的支付密码插件,先上四张效果图。 以下代码,根据Masonry布局,若项目有Masonry库,根据文件命名,复制可直接用。 PasswordView.h#import <UIKit/UIKit.h>#import "MZTTextField.h"@interface PasswordView : UIView//密码输入文本框@property (...原创 2018-09-14 14:52:38 · 912 阅读 · 0 评论 -
iOS开发-界面之间的跳转
界面之间的跳转通常有三种。1.改变window的根视图[UIApplication sharedApplication].keyWindow.rootViewController = VC;2.利用UINavigationController进行push、pop (最常用)[self.navigationController pushViewController:VC anim...原创 2018-09-13 14:30:12 · 1450 阅读 · 0 评论 -
iOS开发-获取顶层的ViewController
在iOS开发中,我们经常性会需要获取当前页面的ViewController,也就是我们常说最顶层的ViewController或正在展示的ViewController,然后需要最顶层的ViewController进行一些操作。例如在最顶层的ViewController上展示一个UIAlertController,或者在最顶层的ViewController上present或push另一个View...原创 2018-09-13 11:30:52 · 552 阅读 · 0 评论 -
iOS-系统相机
可以调用系统相机进行拍照和摄像,拍照后的图片可编辑,并保存到系统相册中。#import "ViewController.h"#import "ScanViewController.h"#import <AVFoundation/AVFoundation.h>#import <Photos/Photos.h>@interface ViewController ...原创 2018-08-16 10:46:56 · 900 阅读 · 0 评论 -
iOS-手电筒照明
打开手电筒照明的思路:初始化相机设备 -> 点击按钮 -> 改变照明状态 -> 根据状态打开或关闭手电筒#import "ViewController.h"#import <AVFoundation/AVFoundation.h>@interface ViewController ()@property (nonatomic, strong) AVCa...原创 2018-08-13 11:09:06 · 974 阅读 · 0 评论 -
iOS-系统相册
调用系统相册选择一张图片并显示出来,系统相册只能单选。#import "ViewController.h"#import <AVFoundation/AVFoundation.h>@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>...原创 2018-08-15 15:17:25 · 894 阅读 · 0 评论 -
iOS开发-frame与bouns详解
1、iOS坐标系在iOS坐标系中,以屏幕左上角为坐标原点(0, 0),往右是X正方向,往下是Y正方向。2、frame与bounsbounds和frame都是CGRect类型,CGRect是包含一个CGPoint和一个CGSize的结构体。struct CGRect { CGPoint origin; CGSize size;};origin决定view的原...原创 2019-07-17 21:23:37 · 533 阅读 · 0 评论 -
iOS开发-为什么所有UI操作必须放在主线程
为什么所有UI操作必须放在主线程?因为UIKit框架是线程不安全的。因为UIKit框架不是线程安全的,所以涉及多个线程同时对UI进行操作会造成什么影响、问题、错误,这里就不再赘述。那么,就有人会问为什么不把UIKit框架设置为线程安全呢?因为线程安全需要加锁,我们都知道加锁就会消耗性能,影响处理速度,影响渲染速度,我们通常自己在写@property时都会写nonatomic来追求...原创 2019-01-17 21:46:18 · 3064 阅读 · 1 评论 -
iOS开发-Scale to Fill、Aspect Fit、Aspect Fill的区别
Scale:拉伸图片Aspect:图片长宽的比例,保持图形的长宽比,保持图片不变形。Aspect Fill:在保持长宽比的前提下,缩放图片,使图片充满容器。Aspect Fit:在保持长宽比的前提下,缩放图片,使得图片在容器内完整显示出来。Scale to Fill:缩放图片,使图片充满容器。图片未必保持长宽比例协调,有可能会拉伸至变形。下图是网上下载的用来说明几个属性的含义:...转载 2019-09-19 10:59:58 · 2768 阅读 · 0 评论 -
iOS开发-layoutSubviews、setNeedsLayout、layoutIfNeeded的爱恨情仇
iOS 中 UIKit 为 UIView 提供了这些方法来进行视图的更新与重绘://更新方法- (void)setNeedsLayout;- (void)layoutIfNeeded;- (void)layoutSubviews;//重绘方法- (void)drawRect:(CGRect)rect;- (void)setNeedsDisplay;- (void)se...原创 2019-10-02 00:29:29 · 1054 阅读 · 1 评论 -
iOS开发-快速修改UIView的frame方法
在iOS中,通常修改UIView.frame中的某一个值是非常痛苦的,因为Size和Origin都是readonly的,所以每次都需要进行如下繁琐的书写:view.frame = CGRectMake(view.frame.origin.x, 100, view.frame.size.width, view.frame.size.height);这种写法在UI较多的界面中,写的人非常痛苦...原创 2019-07-28 22:20:13 · 1597 阅读 · 0 评论 -
iOS开发-UILabel文本的宽度和高度计算
在iOS开发中我们都会遇到界面搭建中UILabel文本的宽度和高度的不可预估带来的适配或者约束中的麻烦。如果使用sb进行界面布局,只要label不设置宽、高约束就会自适应。1.单行计算单行文本较为简单,一般单行也不会去计算高度,我尽量写的详细一些。 //1.创建UILabel但不要设置frame UILabel *text = [[UILabel alloc]ini...原创 2018-07-18 22:14:48 · 11462 阅读 · 0 评论 -
iOS-导航栏全透明
-(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //设置导航栏背景图片为一个无图的image,导航栏会加载空imgae,就自然透明掉了 [self.navigationController.navigationBar setBackgroundImage:[[UIIm...原创 2018-08-12 11:18:05 · 3193 阅读 · 0 评论 -
iOS-禁止横屏
通常我们的App是不能横屏的,只在播放视频时可以横屏,所以我们就要对App禁止横屏。这里讨论全局禁止横屏的两种方法,暂不讨论特定页面横屏问题。1.APP TargetAPP Target -> General -> Deployment Info -> 取消勾选 Landscape Left 和 Landscape Right。2.AppDelegate.m...原创 2018-08-12 11:00:43 · 3756 阅读 · 0 评论 -
iOS-UIWebView简单使用
1、什么是UIWebViewUIWebView是ios内置的浏览器控件,可以用来直接加载远程的网页资源,也可以加载绝大部分的常见文件htm/html、txt、pdf/keynote、ppt、doc/docx、音视频文件等等,还可以通过调用UIWebView提供的api实现页面的前进、后退、刷新等动作,甚至还可以动态的设置网页内容。2.简单使用加载网页 /** [UI...原创 2018-07-18 23:57:29 · 817 阅读 · 0 评论 -
iOS-UITabBarController+UINavigationController的混合使用
绝大多数APP都采用UITabBarController+UINavigationController的设计模式,是一种很主流的经典的设计方式。一、一个 UITabBarController 中嵌套多个 UINavigationController(最流行的方式) //1.创建三个子控制器 ViewController *vc1 = [[ViewController a...原创 2018-07-22 20:55:27 · 1869 阅读 · 0 评论 -
iOS-UINavigationController基础使用
1.首先说明什么是导航控制器导航控制器是通过栈的形式来管理子控制器的(先进后出)。显示在导航控制器上得view永远是栈顶控制器的view。一个导航控制器只有一个导航条,也就是说所有的控制器公用一个导航条。在任意一个导航栏的子控制器里修改导航栏的属性同样会显示在其他的子控制器里。所以在任意控制器里修改导航栏属性之后,都要在当前的控制器的viewWillDisappear里重新修改...原创 2018-07-18 22:42:28 · 233 阅读 · 0 评论 -
iOS开发-ViewController的生命周期分析和使用
一、结构按结构可以对iOS的所有ViewController分成两类:1、主要用于展示内容的ViewController,这种ViewController主要用于展示内容,并与用户交互,如UITableViewController,UIViewController。2、用于控制和显示其他ViewController的ViewController,其实这种ViewController一般...转载 2018-06-26 22:07:10 · 191 阅读 · 0 评论 -
iOS开发-图片轮播器控件
一.简介图片轮播器在App中是一个最常见的功能,一般放在首页的顶或中部。图片轮播器最基本功能:①定时循环无限滚动;②自由拖拽滚动;③点击跳转。二.实现思路实现图片轮播器有很多种方法,本文将采用最简单易懂的实现方法:一个 UIScrollView + 多个 UIImageView 或 UIButton。1、首先根据传入的数据进行配置,假设传入三张图片 [A,B,C],将数组配置为...原创 2018-10-06 18:15:12 · 728 阅读 · 0 评论