谈 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

从零构建锂电池主动均衡系统:Simulink仿真中的Buck-Boost拓扑实战指南 本文详细介绍了如何在Simulink中从零构建基于Buck-Boost拓扑的锂电池主动均衡系统。通过仿真环境搭建、参数优化、控制策略设计和性能评估,为工程师提供了完整的实战指南,帮助快速验证和优化均衡算法,提升电池组一致性与寿命。 阅读详情

相关推荐

快衰落、慢衰落,平坦衰落、频率选择性衰落

目录一、大尺度衰落和小尺度衰落二、平坦衰落和频率选择性衰落1.反射墙、固定天线模型2.相干带宽和时延扩展三、快衰落和慢衰落1.反射墙、运动天线模型2.相干时间和多普勒扩展四、联系总结 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、大尺度衰落和小尺度衰落 移动无线信道的主要特征是信道强度关于时间和频率的变化,大致分两种: 大尺度衰落: .

weixin_45662974的博客 3万+

swift4 UIView.animate() 参数详解

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

weixin_34195142的博客 1947

原形网络(Prototypical Networks)基于PyTorch的实现

我在Jay2coomzz的基础上修改了数据处理方式和evaluation_model()方法,作为初学者若有不当之处恳请大家批评指正,原文链接如下: https://blog.youkuaiyun.com/weixin_38471579/article/details/102631018 数据集和源码链接将放到评论区 文章目录1 数据集一个简单的数据集介绍数据集处理2 搭建网络CNNProtonets 1 数据集 一个简单的数据集介绍 Omniglot数据集一共包含1623 类手写体,每一类中包含20 个样本。其中.

weixin_43872532的博客 6636

UIView 动画降帧探究

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

Desgard_Duan 990

AI全景之第八章第三节:时间序列分析与预测技术

摘要 时间序列分析与预测技术从传统统计模型发展到深度学习方法。传统方法包括ARIMA模型(处理趋势和季节性)、指数平滑(加权平均预测)和状态空间模型(概率框架分解)。机器学习方法通过特征工程和树模型提升非线性建模能力。深度学习方法中,RNN/LSTM处理序列依赖,TCN利用因果卷积,Transformer通过注意力机制捕获长程依赖。当前研究趋势结合神经符号方法和生成模型,以提高预测精度和可解释性。不同方法各具优势,需根据数据特性和预测需求选择。

技术引领业务创新 988

手把手教你用AirSim生成无人机训练数据集:RGB/深度图/分割图全攻略

本文详细介绍了如何使用AirSim仿真插件在UE4环境中生成无人机训练数据集,涵盖RGB、深度图和分割图等多种模态数据的采集与处理。通过实战指南,读者可以掌握环境配置、多模态数据采集、自动化流程设计及数据后处理等关键技术,为无人机视觉算法开发提供高质量训练数据。

weixin_29008805的博客 448

Animation的四种形式

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

weixin_34209851的博客 444

TSMC 65nm PDK衬底文件转换避坑记:从.itf到.itd,解决ADS导入乱码与金属层缺失

本文详细解析了TSMC 65nm PDK衬底文件从.itf到.itd转换过程中的常见问题及解决方案,包括ADS导入乱码与金属层缺失的修复方法。通过环境准备、文件定位、转换操作和问题诊断的完整流程,帮助工程师高效完成衬底文件转换,确保电磁仿真精度。

weixin_30855099的博客 301

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

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

空杯子 1462

科技与伦理的平衡点:人类计算的伦理

科技与伦理的平衡点:人类计算的伦理 关键词 科技与伦理 人类计算 隐私问题 道德决策自动化 公平性与偏见 法律与社会责任 摘要 本

AI天才研究院 1162

QT入门开发一个时钟

本文讲述了时钟开发的具体过程以及代码。 涉及到一下几个知识点: 1. 定时器使用 2. 本地时间获取 3. resource资源读取 4. 图片绘制 5. 图片按照中心旋转 6. sin或者cos角度计算。

啊渊的专栏 5144

谈UIView Animation编程艺术

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

iOS_开发 262

【问题解决】解决 Python `PermissionError` 权限不足:文件/进程/端口全场景修复

本文总结了Python程序中常见的权限问题及解决方案,包括文件、进程和端口权限错误。文件权限问题通常由文件占用、权限不足或路径错误引起;进程问题多因权限不足或系统限制;端口问题则与端口占用、防火墙或特权端口相关。解决方案提供了详细的代码实现:文件权限管理器类(FilePermissionManager)包含检查权限(check_permission)、修复权限(fix_permission)、安全写入(safe_write)和安全删除(safe_delete)等方法,通过异常处理和临时文件等技术确保操作安全

博客 357

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

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Objective-C语言的柱状图

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

2501_91403789的博客 383

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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的博客 156
上一篇: 唐巧总结的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、付费专栏及课程。

余额充值