谈 UIView Animation 编程艺术

iOS——图像显示原理以及UI流畅性优化方案 文章目录图像显示原理CPU和GPU分别干了哪些事CPU和GPU在具体的工作上都有哪些承担UI卡顿和掉帧的原因滑动优化方案前的准备知识FPS像素点如何出现到屏幕上渲染参与者像素相关知识合成过程对齐与不对齐滑动优化方案UIView的绘制原理异步绘制离频渲染什么是离屏渲染?何时会触发离屏渲染为何要避免离屏渲染?总结 图像显示原理 关于CPU和GPU都是由总线连接起来的,在CPU输出的往往是一个位图,上... 阅读详情

得动画者得天下啊

1469590013134337.png

文章结构图

“在英国把动画叫Animation,它的动词形式是Animate,你们中文意思是“赋予生命”。对于人类来说,眼睛看到一幅画或一个物体后,在0.34秒内不会消失。利用这一原理,在一幅画还没有消失前播放下一幅画,就会给人造成一种流畅的视觉变化效果。对于苍蝇,那就不一样,那叫反应迟钝。”

1252638-b4400573ed42866e.gif

“哦~卓先生说的应该就是逐帧动画,每一个画面就是一帧,逐一播放形成连续的动画效果。

"Tom先生,您那个时代动画又有什么变化吗?”

“我是看卓先生的电影长大的,1940我才出现在荧屏上。不过有些不一样了,不仅仅单一画面逐一播放,你们可以在《猫和老鼠》中,看到我的胡子被Jerry拉得夸张长,追起Jerry来,身体那些夸张的伸缩,人无法做到的,这也是动漫的魅力。这些动画变化,是可以通过计算机计算每一个时间变化的信息集合成每一帧的画面。 ”

1252638-2bfdc6e531105220.gif

“哦~Tom先生说的应该是关键帧动画。这个在现代技术比较常见的动画制作方式。比如现在大家用的苹果产品,按钮的大小变化,图片的移动,旋转等等这些都是关键帧动画。作为iOS开发者的话,UIView Animation就是属于关键帧动画这一类”。

现代的技术是很先进,挺有味道的,我们一起来领略一下,还得请Tom示范一下。

一.大小动画(改变frame)

1.展示效果

1252638-e55121cc90b124cc.gif

fram大小变化

2.Show Code

1
2
3
4
5
6
7
8
9
10
11
-(void)changeFrame{
     CGRect originalRect = self.anView.frame;
     CGRect rect = CGRectMake(self.anView.frame.origin.x-20, self.anView.frame.origin.y-120, 160, 80);
     [UIView animateWithDuration:1 animations:^{
         self.anView.frame = rect;
     } completion:^(BOOL finished) {
         [UIView animateWithDuration:1 animations:^{
             self.anView.frame = originalRect;
         }];
     }];
}

二.拉伸动画(改变bounds)

1.展示效果

1252638-c537a67a110fed09.gif

bounds变化

2.Show Code

1
2
3
4
5
6
7
8
9
10
11
12
-(void)changeBounds{
     CGRect originalBounds = self.anView.bounds;
     //尽管这个rect的x,y跟原始的不同,动画也只是改变了宽高
     CGRect rect = CGRectMake(0, 0, 300, 120);
     [UIView animateWithDuration:1 animations:^{
     self.anView.bounds = rect;
     } completion:^(BOOL finished) {
         [UIView animateWithDuration:1 animations:^{
             self.anView.bounds = originalBounds;
         }];
     }];
}

三.转移动画(改变center)

1.展示效果

1252638-982b6c7a810f4ed1.gif

center变化.gif

2.Show Code

1
2
3
4
5
6
7
8
9
10
11
-(void)changeCenter{
     CGPoint originalPoint = self.anView.center;
     CGPoint point = CGPointMake(self.anView.center.x, self.anView.center.y-170);
     [UIView animateWithDuration:0.3 animations:^{
         self.anView.center = point;
     } completion:^(BOOL finished) {
         [UIView animateWithDuration:1 animations:^{
             self.anView.center = originalPoint;
         }];
     }];
}

谢谢二爷的示范,经典的表情也勾起很多人的回忆。好,我们回到现实,以上的3个例子,大家不难发现共同的特点和重复性。

1.都是改变UIView的属性就可以产生动画

2.都是带有block做结束回调,对结束监控

3.动画大小和位置变化可以通过多种方式实现

“佛爷,是不是很好奇我们并没有使用Tom先生很多图片组逐一显示?来,也请您下矿一走!”。“哈哈,好!不过那碗河水我还是要倒的”,“行,随你翻腾~”。

四.旋转动画(改变transform)

1.展示效果

1252638-21b81e01aeffae75.gif

transform变化.gif

2.Show Code

1
2
3
4
5
6
7
8
9
10
11
12
-(void)transform{
     CGAffineTransform originalTransform = self.anView.transform;
     [UIView animateWithDuration:2 animations:^{
         //self.anView.transform = CGAffineTransformMakeScale(0.6, 0.6);//缩放
         //self.anView.transform = CGAffineTransformMakeTranslation(60, -60);
         self.anView.transform = CGAffineTransformMakeRotation(4.0f);
     } completion:^(BOOL finished) {
         [UIView animateWithDuration:2 animations:^{
             self.anView.transform = originalTransform;
         }];
     }];
}

五.透明度动画(改变alpha)

1.展示效果

1252638-8413629d4f3ffe79.gif

alpha变化.gif

2.Show Code

1
2
3
4
5
6
7
8
9
-(void)alpha{
     [UIView animateWithDuration:2 animations:^{
         self.anView.alpha = 0.3;
     } completion:^(BOOL finished) {
         [UIView animateWithDuration:2 animations:^{
             self.anView.alpha = 1;
         }];
     }];
}

卓先生,停停停,来,回到我们舞台中间来。就以上5中都能让您玩的这么愉快,以上都是仅仅修改本身的属性值,我再介绍剩下三种基于UIView特别的动画,一个是Keyframe,一个Spring和Transition动画。一人一个轮着来,卓先生你先。

六.背景颜色Keyframes动画(改变background)

1.展示效果

1252638-1bd8f41adab762f0.gif

background变化.gif

2.Show Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-(void)changeBackground{
     [UIView animateKeyframesWithDuration:9.0 delay:0.f options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
         [UIView addKeyframeWithRelativeStartTime:0.f relativeDuration:1.0 / 4 animations:^{
             self.anView.backgroundColor = [UIColor colorWithRed:0.9475 green:0.1921 blue:0.1746 alpha:1.0];
         }];
         [UIView addKeyframeWithRelativeStartTime:1.0 / 4 relativeDuration:1.0 / 4 animations:^{
             self.anView.backgroundColor = [UIColor colorWithRed:0.1064 green:0.6052 blue:0.0334 alpha:1.0];
         }];
         [UIView addKeyframeWithRelativeStartTime:2.0 / 4 relativeDuration:1.0 / 4 animations:^{
             self.anView.backgroundColor = [UIColor colorWithRed:0.1366 green:0.3017 blue:0.8411 alpha:1.0];
         }];
         [UIView addKeyframeWithRelativeStartTime:3.0 / 4 relativeDuration:1.0 / 4 animations:^{
             self.anView.backgroundColor = [UIColor colorWithRed:0.619 green:0.037 blue:0.6719 alpha:1.0];
         }];
         [UIView addKeyframeWithRelativeStartTime:3.0 / 4 relativeDuration:1.0 / 4 animations:^{
             self.anView.backgroundColor = [UIColor whiteColor];
         }];
     } completion:^(BOOL finished) {
         NSLog(@ "动画结束" );
     }];
}

七.Spring动画(iOS 7.0起)

1.展示效果

1252638-be761fff07d7abe1.gif

spring动画.gif

2.Show Code

1
2
3
4
5
6
7
8
9
10
11
12
-(void)springAnimation{
     CGRect originalRect = self.anView.frame;
     CGRect rect = CGRectMake(self.anView.frame.origin.x-80, self.anView.frame.origin.y, 120, 120);
     [UIView animateWithDuration:0.4 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:4 options:UIViewAnimationOptionCurveLinear animations:^{
         self.anView.frame = rect;
         } completion:^(BOOL finished) {
             [UIView animateWithDuration:1 delay:1 usingSpringWithDamping:0.5 initialSpringVelocity:4 options:UIViewAnimationOptionCurveLinear animations:^{
                    self.anView.frame = originalRect;
             } completion:^(BOOL finished) {
         }];
     }];
}

八.transition动画

1.展示效果

1252638-a10f214c11af5c57.gif

transition动画.gif

2.Show Code

1
2
3
4
5
6
7
8
9
10
-(void)transitionAnimation{
     [UIView transitionWithView:self.anView duration:2.0 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
         //self.anView.backgroundColor = [UIColor blueColor];
     } completion:^(BOOL finished) {
         [UIView transitionWithView:self.anView duration:2.0 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
         //self.anView.backgroundColor = [UIColor greenColor];
         } completion:^(BOOL finished) {
         }];
     }];
}

九.关于参数option选择说明

1.UIViewAnimationOptions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
UIViewAnimationOptionLayoutSubviews             //进行动画时布局子控件
UIViewAnimationOptionAllowUserInteraction       //进行动画时允许用户交互
UIViewAnimationOptionBeginFromCurrentState      //从当前状态开始动画
UIViewAnimationOptionRepeat                     //无限重复执行动画
UIViewAnimationOptionAutoreverse                //执行动画回路
UIViewAnimationOptionOverrideInheritedDuration  //忽略嵌套动画的执行时间设置
UIViewAnimationOptionOverrideInheritedCurve     //忽略嵌套动画的曲线设置
UIViewAnimationOptionAllowAnimatedContent       //转场:进行动画时重绘视图
UIViewAnimationOptionShowHideTransitionViews    //转场:移除(添加和移除图层的)动画效果
UIViewAnimationOptionOverrideInheritedOptions   //不继承父动画设置
UIViewAnimationOptionCurveEaseInOut             //时间曲线,慢进慢出(默认值)
UIViewAnimationOptionCurveEaseIn                //时间曲线,慢进
UIViewAnimationOptionCurveEaseOut               //时间曲线,慢出
UIViewAnimationOptionCurveLinear                //时间曲线,匀速
UIViewAnimationOptionTransitionNone             //转场,不使用动画
UIViewAnimationOptionTransitionFlipFromLeft     //转场,从左向右旋转翻页
UIViewAnimationOptionTransitionFlipFromRight    //转场,从右向左旋转翻页
UIViewAnimationOptionTransitionCurlUp           //转场,下往上卷曲翻页
UIViewAnimationOptionTransitionCurlDown         //转场,从上往下卷曲翻页
UIViewAnimationOptionTransitionCrossDissolve    //转场,交叉消失和出现
UIViewAnimationOptionTransitionFlipFromTop      //转场,从上向下旋转翻页
UIViewAnimationOptionTransitionFlipFromBottom   //转场,从下向上旋转翻页

2.UIViewKeyframeAnimationOptions

1
2
3
4
5
6
7
8
9
10
11
12
UIViewAnimationOptionLayoutSubviews            //进行动画时布局子控件
UIViewAnimationOptionAllowUserInteraction      //进行动画时允许用户交互
UIViewAnimationOptionBeginFromCurrentState     //从当前状态开始动画
UIViewAnimationOptionRepeat                    //无限重复执行动画
UIViewAnimationOptionAutoreverse               //执行动画回路
UIViewAnimationOptionOverrideInheritedDuration  //忽略嵌套动画的执行时间设置
UIViewAnimationOptionOverrideInheritedOptions  //不继承父动画设置
UIViewKeyframeAnimationOptionCalculationModeLinear      //运算模式 :连续
UIViewKeyframeAnimationOptionCalculationModeDiscrete    //运算模式 :离散
UIViewKeyframeAnimationOptionCalculationModePaced       //运算模式 :均匀执行
UIViewKeyframeAnimationOptionCalculationModeCubic       //运算模式 :平滑
UIViewKeyframeAnimationOptionCalculationModeCubicPaced  //运算模式 :平滑均匀

就UIView的动画而言,UIViewKeyframeAnimationOptions紧在Keyframes,其余的都是UIViewAnimationOptions。

十.总结和扩展

1.UIView动画主要是变化UIView的自带属性

2.UIView动画可以有很多种方式实现同一效果

3.Spring动画iOS 7.0以上才有

4.UIViewKeyframeAnimationOptions用着Keyframes动画,其余都用UIViewAnimationOptions枚举

这就以上UIView Animation的动画的基础内容了,节目到了尾声。嘿,卓先生,Tom先生停下来,给大家说byebye啦。谢谢大家,让我们再次以热烈的掌声感谢卓先生和Tom先生。谢谢~~

十一.源码地址

欢迎下载和Start:https://github.com/minggo620/iOSViewAnimation

原文地址: http://www.cocoachina.com/ios/20160727/17199.html

Python+QMT量化交易实战:从零搭建你的第一个极速策略(附完整代码) 本文提供了一份详细的Python+QMT量化交易实战指南,手把手教你从零搭建一个可回测、可实盘的极速策略。内容涵盖环境配置、QMT核心机制解析、双均线策略的完整代码实现、回测优化方法以及实盘部署要点,帮助量化交易新手快速入门并掌握核心开发流程。 阅读详情

相关推荐

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

swift4 UIView.animate() 参数详解

概述 UIView.animate 参数说明: 1. withDuration: TimeInterval 动画执行时间 2. delay:TimeInterval 动画延迟执行时间 3. usingSpringWithDamping: CGFloat 弹簧阻力,取值范围为0.0-1.0,数值越小“弹簧”振动效果越明...

weixin_34195142的博客 1947

【MCU】一种基于RTOS的无应答重发机制

文章目录一、背景描述二、结构框图三、基于RTOS的信号量的实现(3-1)思路描述(3-2)步骤(3-2-1)定义超时重发信号量(3-2-2)定义发送线程入口(3-2-3)定义接收线程入口四、基于定时器的实现(4-1)思路描述(4-2)步骤(4-2-1)创建定时器(4-2-2)定义定时器超时处理函数(4-2-3)定义发送线程入口(4-2-4)定义接收线程入口 一、背景描述 ​ 在微控制器之间进行数据通信时,大多需要添加无应答重发机制,以增强数据交互和通信的稳定性。 在使用UART通信的双方设备,当一次数据传输

iriczhao的博客 1522

UIView 动画降帧探究

目录为什么要降帧首先要说明一件事,那就是为什么要对动画降帧?众所周知,刷新频率越高体验越好,对于 iOS app 的刷新频率应该是越接近越 60fps 越好,这里主动给动画降帧,肯定会影...

Desgard_Duan 990

OpenCLI入门:让任何网站变成你的命令行工具(超详细版)

最有用的工具,往往是最简单的。 opencli就是这样。 它不会帮你写代码,不会帮你做决策,但它能把200+个平台装进你的命令行。 让你用最简单的方式,获取最丰富的数据。

weixin_66295112的博客 2088

DSP TMS320C6657中FFT函数的调用与具体使用方法

首先明确一点,C6678中FFT的函数形式为: N : length of FFT in complex samples ptr_x : pointer to complex data input ptr_w : pointer to complex twiddle factor ptr_y : pointer to complex output data brev : pointer to bit reverse table containing 64 entries n_min : should be

Kayboy的博客 3011

Animation的四种形式

packagecom.lee.vivid;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.animation.AlphaAnimati...

weixin_34209851的博客 444

拆解一个800G光模块:手把手带你认识里面的MT插芯和光纤阵列(FA)

本文详细拆解了800G光模块中的关键组件MT插芯和光纤阵列(FA),揭示了并行光学技术如何实现高速数据传输。通过显微镜下的精密观察,展示了MT插芯的高精度构造和光纤阵列的连接奥秘,同时解析了高精度研磨工艺对光信号传输的重要性。这些微型组件是高速收发模块实现800Gbps带宽的核心技术。

weixin_30839881的博客 1546

《iOS之一起进大厂》系列-iOS如何监控界面卡顿掉帧,如何优化

学而时习之,不亦说乎 前面的话 大家好,我是杯子,写这个系列,一是为了学习和复习。二是为了更好阅读体验。看了很多类似面试题的博文或总结pdf.内容有两类 ,一类是很言简意赅的干货,很短,但是看了理解不了,记不住,死记硬背的话又不知道原理和逻辑。 一类是博文是写的很长很详细,看完后面了,忘了前面,最后也不知道重点在哪。其实大家面试的时候,不可能像平时看文章那样,能把每个细节都描述的清清楚楚,面试时主要能把关键点讲出来,并且能在进一步提问中,把这些点的原理串联起来,保持逻辑清晰。希望大家看到我写的这个系列能.

空杯子 1463

从时序精度到视觉盛宴:PY32F030驱动WS2812的工程艺术与避坑指南

本文深入探讨了基于PY32F030微控制器驱动WS2812智能LED的完整解决方案。通过精确的时序控制、硬件PWM结合DMA传输技术,实现了稳定可靠的驱动效果,并提供了电源管理、信号完整性和常见问题排查等实用避坑指南,帮助开发者轻松应对严格的纳秒级时序挑战。

wind6的博客 120

Spring AI 实战:第二章、Spring AI提示词之玩转AI占卜的艺术

引言:程序员的神秘学探索引言:程序员的神秘学探索“下个迭代能按时发布吗?“这次晋升机会有多大?“我写的代码为什么总在半夜出bug?作为一名开发者是否也曾被这些略带玄学问题困扰?那让我们用Spring AI和提示词工程打造一个专属于程序员的"赛博占卜师",让大师来为你占卜一卦吧~一、提示词工程 - 与AI对话的艺术1.1 提示词工程是什么类比一下,AI就像一位刚从名校毕业的高材生它知识渊博但缺乏经验能解决复杂问题但需要明确指引有时会"过度脑补"(专业术语叫"幻觉")

liaokailin的专栏 1849

谈UIView Animation编程艺术

原文链接:http://www.jianshu.com/p/51ce7966a038 “Action!”,欢迎收看这期大型扯谈实用类技术节目,《小明讲故事》,大家好我是小明! 有人会这么问,“小明,no zuo no die,你觉得哪个城市的人最作?”。“我觉得~伦敦的人比较作,相当作,作得有风格,作得有国际范!因为~有一个伦敦人叫

iOS_开发 262

博途PLC模糊PID控制(附SCL完整源代码)

操作人员根据对象的当前状态和以往的控制经验,用手动控制的方法给出适当的控制量,对被控对象进行控制。用电脑模拟操作人员手动控制的经验,对被控对象进行控制。用模糊数学的知识模仿人脑的思维方式,对模糊现象进行识别和判决,给出精确的控制量,对被控对象进行控制。与经典控制理论和现代控制理论相比,模糊控制的特点是不需要建立对象的精确模型。根据操作人员手动控制的经验,总结的完整控制规则,在根据系统当前的运行状态,经过模糊推理,模糊判决等运算,求出控制量,实现对被控对象的控制。......

RXXW_Dor的博客 8961

RUN 澳大利亚移民路线技术解析:189/482/858 的数据模型、门槛数字与文档生成管线

本文以 RUN 手册中的澳大利亚深度笔记为骨架,拆解 189 独立技术移民、482 紧缺技能签证(Skills in Demand)与 858 国家创新签证三条主线的门槛数字与流程,并说明这些内容如何经由 `src/global_notes/australia.md` 与 `src/global.json` 的数据模型,被 [构建脚本](https://link.gitcode.com/i/b4b

gitblog_00644的博客 455

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Objective-C语言的柱状图

Objective-C是一种面向对象的编程语言,广泛用于iOS和macOS的开发。它基于C语言,并引入了小型的对象模型。动态性:支持动态类型、动态绑定,使得开发者在运行时可以创建和修改对象。面向对象:有着清晰的面向对象模型,允许继承和多态。Rich API:提供丰富的API,适合快速开发图形用户界面(GUI)应用。通过上述步骤,我们实现了一个简单的柱状图。在这个过程中,我们了解了如何使用Objective-C语言和Core Graphics绘制图形,如何将数据与UI组件结合,以及如何处理用户交互。

2501_91403789的博客 383

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HarmonyOS 6 React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果

在React Native中开发鸿组件(这里指的是鸿蒙(HarmonyOS)组件),你需要了解鸿蒙开发的基础以及如何在React Native项目中集成鸿蒙应用。鸿蒙OS是由华为开发的一个分布式操作系统,主要用于其智能设备,如手机、平板、智能手表等。首先,你需要熟悉鸿蒙OS的开发环境设置和基本开发流程。React Native本身主要用于Harmony和Harmony平台的开发,但你可以通过以下几种方式将鸿蒙应用集成到React Native项目中:A. 使用WebView。

czhm57的博客 2087

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【共创季稿事节】鸿蒙原生ArkTS布局方式之ColumnStart垂直排列

鸿蒙ArkTS布局之Column垂直排列解析 本文深入探讨鸿蒙原生ArkTS中的Column组件垂直布局方式。文章首先对比声明式UI与传统命令式UI的区别,强调ArkUI框架通过build()方法描述界面结构的优势。随后系统介绍ArkUI四大核心布局容器(Column/Row/Stack/Flex),重点分析Column组件的垂直排列特性。 Column作为垂直布局容器具有三大默认行为:自上而下排列、水平方向拉伸、高度由内容决定。文章详细解析了justifyContent和alignItems属性,前者控制

woshi_xiaoa的博客 481

31、iOS底层分析 - 界面优化

大纲: 1、界面渲染流程 2、UIView & CALayer 3、卡顿检测 4、案例实战 5、异步渲染 1、界面渲染流程 UIKit : 日常交互组件基本上都是来自于 UIKit,我们可以通过设置 UIKit 的 Layout ,来完成日程界面的绘画工作。但是并不具备在屏幕上成像的能力,在这个过程中,将对用户的操作事件进行响应,从而将当前的事件通过图层的图层树...

shengdaVolleyball的博客 1362

IPhone之UIView中动画

areAnimationsEnabled  返回一个布尔值表示动画是否结束。  + (BOOL)areAnimationsEnabled  返回值  如果动画结束返回YES,否则NO。     beginAnimations:context:  开始一个动画块

trandy的专栏 1105

ios基础篇(十.一)—— 动画

CADisplayLink CADisplayLink是一种以屏幕刷新频率触发的时钟机制,每秒钟执行大约60次左右 CADisplayLink是一个计时器,可以使绘图代码与视图的刷新频率保持同步,而NSTimer无法确保计时器实际被触发的准确时间 使用方法: 定义CADisplayLink并制定触发调用方法 将显示链接添加到主运行循环队列 核心动画 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是

努力进阶的小菜鸟 409

解析 iOS 动画原理与实现

这篇文章不会教大家如何实现一个具体的动画效果,我会从动画的本质出发,来说说 iOS 动画的原理与实现方式。 什么是动画 动画,顾名思义,就是能“动”的画。人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多张图片连续快速的切换时,就会被认为是一段连续播放的动画了。 比如,中国古代的“走马灯”,就是用的这个原理。有些人还会在一个本子每页上手绘一些漫画,当快速翻页的时候,也会看到动画的效果,比如...

weixin_30500105的博客 341

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 159
上一篇: 唐巧总结的40个国人iOS技术博客
下一篇: 谈谈ios传值方式(属性传值、代理传值、Block传值、单例传值、通知传值、KVC传值)
TY_IOS
博客等级 码龄11年 16粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值