`
啸笑天
  • 浏览: 3472204 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

iOS 手势及触摸

 
阅读更多

一、响应链

在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应。

首先,当发生事件响应时,必须知道由谁来响应事件。在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会。当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对象viewcontroller(如果存在),然后是它的父视图(superview)对象(如果存在),以此类推,直到顶层视图。接下来会沿着顶层视图(top view)到窗口(UIWindow对象)再到程序(UIApplication对象),如果UIApplication也不响应,那么还有一个地方可以构建一个全局响应者作为响应链的最后一个环节,那就是应用程序的委托,前提是他是UIResponder的子类。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要由对象处理事件,事件就停止传递。

一个典型的相应路线图如:

First Responser -- > The Window -- >The Application -- > App Delegate

正常的响应者链流程经常被委托(delegation)打断,一个对象(通常是视图)可能将响应工作委托给另一个对象来完成(通常是视图控制器ViewController),这就是为什么做事件响应时在ViewController中必须实现相应协议来实现事件委托。在iOS中,存在UIResponder类,它定义了响应者对象的所有方法。UIApplication、UIView等类都继承了UIResponder类,UIWindow和UIKit中的控件因为继承了UIView,所以也间接继承了UIResponder类,这些类的实例都可以当作响应者。

 

管理事件分发

视图对触摸事件是否需要作处回应可以通过设置视图的userInteractionEnabled属性。默认状态为YES,如果设置为NO,可以阻止视图接收和分发触摸事件。除此之外,当视图被隐藏(setHidden:YES)或者透明(alpha值为0)也不会收事件。不过这个属性只对视图有效,如果想要整个程序都步响应事件,可以调用UIApplication的beginIngnoringInteractionEvents方法来完全停止事件接收和分发。通过endIngnoringInteractionEvents方法来恢复让程序接收和分发事件。

如果要让视图接收多点触摸,需要设置它的multipleTouchEnabled属性为YES,默认状态下这个属性值为NO,即视图默认不接收多点触摸。

 

二、触摸

iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder提供的如下4种方式:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  //手指触摸屏幕时报告UITouchPhaseBegan事件

 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event   //在手指在屏幕上移动时报告UITouchPhaseMoved事件

 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event   //在手指离开屏幕时报告UITouchPhaseEnded事件

 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event    //在因接听电话或其他因素导致取消触摸时报告UITouchPhaseCancelled事件

属性:

——UITouch

UITouch对象是一个手指接触到屏幕并在屏幕上移动或离开屏幕时创建的。它有几个属性和实例方法:

phase:属性,返回一个阶段常量,指出触摸开始、继续、结束或被取消,是一个枚举配型,包含了

·UITouchPhaseBegan(触摸开始)

·UITouchPhaseMoved(接触点移动)

·UITouchPhaseStationary(接触点无移动)

·UITouchPhaseEnded(触摸结束)

·UITouchPhaseCancelled(触摸取消)

tapCount:属性,轻按屏幕的次数

timeStamp:属性,触摸发生的时间

view:属性,触摸始于那个视图

window:属性,触摸始于哪个窗口

lacationInView:方法,触摸在指定视图中的当前位置

previousLocationView:方法,触摸在指定视图中的前一个位置

——UIEvent

UIEvent对象包含一组相关的UITouch对象,由UITouch对象组成UIEvent对象,可以理解成一个完整的触摸操作是一个UIEvent,而这一系列完整操作中的每个点就是UITouch(按下、移动、离开)。

UIEvent的作用是提供相关触摸操作的列表,如果要获取在屏幕上触摸的手势,可以使用该对象,这一些列操作都存储在Foundation框架中的NSSet对象中。

 

但是这种方式甄别不同的手势操作实在是麻烦,需要你自己计算做不同的手势分辨。后来。。。

苹果就给出了一个比较简便的方式,就是使用UIGestureRecognizer。

三、UIGestureRecognizer

UIGestureRecognizer基类是一个抽象类,我们主要是使用它的子类(名字包含链接,可以点击跳到ios Developer library,看官方文档):

UITapGestureRecognizer

UIPinchGestureRecognizer

UIRotationGestureRecognizer

UISwipeGestureRecognizer

UIPanGestureRecognizer

UILongPressGestureRecognizer

从名字上我们就能知道, Tap(点击)、Pinch(捏合)、Rotation(旋转)、Swipe(滑动,快速移动,是用于监测滑动的方向的)、Pan (拖移,慢速移动,是用于监测偏移的量的)以及 LongPress(长按)。

举个例子,可以在viewDidLoad函数里面添加:

[cpp] view plaincopyprint?

-(void) viewDidLoad  

{  

 [super viewDidLoad];  

 // Do any additional setup after loading the view from its nib.  

 UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];  

 [self.view addGestureRecognizer:panRecognizer];//关键语句,给self.view添加一个手势监测;  

 panRecognizer.maximumNumberOfTouches = 1;  

 panRecognizer.delegate = self;  

 [panRecognizer release];  

}  

其它手势方法类似。

其核心就是设置delegate和在需要手势监测的view上使用addGestureRecognizer添加指定的手势监测。

当然要记得在作为delegate的view的头文件加上<UIGestureRecognizerDelegate>。

不过有些手势是关联的,怎么办呢?例如 Tap 与 LongPress、Swipe与 Pan,或是 Tap 一次与Tap 兩次。

手势识别是具有互斥的原则的,比如单击和双击,如果它识别出一种手势,其后的手势将不被识别。所以对于关联手势,要做特殊处理以帮助程序甄别,应该把当前手势归结到哪一类手势里面。

比如,单击和双击并存时,如果不做处理,它就只能发送出单击的消息。为了能够识别出双击手势,就需要做一个特殊处理逻辑,即先判断手势是否是双击,在双击失效的情况下作为单击手势处理。使用

[A requireGestureRecognizerToFail:B]函数,它可以指定当A手势发生时,即便A已经滿足条件了,也不会立刻触发,会等到指定的手势B确定失败之后才触发。

[cpp] view plaincopyprint?

- (void)viewDidLoad   

{  

    // 单击的 Recognizer  

    UITapGestureRecognizer* singleRecognizer;  

    singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];  

    //点击的次数  

    singleTapRecognizer.numberOfTapsRequired = 1; // 单击  

  

    //给self.view添加一个手势监测;  

  

  [self.view addGestureRecognizer:singleRecognizer];  

  

    

    // 双击的 Recognizer  

    UITapGestureRecognizer* double;  

    doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];  

    doubleTapRecognizer.numberOfTapsRequired = 2; // 双击  

    //关键语句,给self.view添加一个手势监测;  

    [self.view addGestureRecognizer:doubleRecognizer];  

      

    // 关键在这一行,双击手势确定监测失败才会触发单击手势的相应操作  

    [singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];  

    [singleRecognizer release];  

    [doubleRecognizer release];  

}  

  

-(void)SingleTap:(UITapGestureRecognizer*)recognizer  

{  

//处理单击操作  

}  

  

-(void)DoubleTap:(UITapGestureRecognizer*)recognizer  

{  

//处理双击操作  

}  

四、iphone操作手势的大概种类

1.点击(Tap)

点击作为最常用手势,用于按下或选择一个控件或条目(类似于普通的鼠标点击)、

2.拖动(Drag)

拖动用于实现一些页面的滚动,以及对控件的移动功能。

3.滑动(Flick)

滑动用于实现页面的快速滚动和翻页的功能。

4.横扫(Swipe)

横扫手势用于激活列表项的快捷操作菜单

5.双击(Double Tap)

双击放大并居中显示图片,或恢复原大小(如果当前已经放大)。同时,双击能够激活针对文字编辑菜单。

6.放大(Pinch open)

放大手势可以实现以下功能:打开订阅源,打开文章的详情。在照片查看的时候,放大手势也可实现放大图片的功能。

7.缩小(Pinch close)

缩小手势,可以实现与放大手势相反且对应的功能的功能:关闭订阅源退出到首页,关闭文章退出至索引页。在照片查看的时候,缩小手势也可实现缩小图片的功能。

8.长按(Touch &Hold)

在我的订阅页,长按订阅源将自动进入编辑模式,同时选中手指当前按下的订阅源。这时可直接拖动订阅源移动位置。

针对文字长按,将出现放大镜辅助功能。松开后,则出现编辑菜单。

针对图片长按,将出现编辑菜单。

9.摇晃(Shake)

摇晃手势,将出现撤销与重做菜单。主要是针对用户文本输入的。

 

五、通过消息响应者链找到UIView所在的UIViewController 

@interface UIView (FirstViewController)

 

- (UIViewController *) firstViewController;

- (id) traverseResponderChainForUIViewController;

 

@end

 

@implementation UIView (FirstViewController)

 

- (UIViewController *) firstViewController {

    // convenience function for casting and to "mask" the recursive function

    return (UIViewController *)[self traverseResponderChainForUIViewController];

}

 

- (id) traverseResponderChainForUIViewController {

    id nextResponder = [self nextResponder];

    if ([nextResponder isKindOfClass:[UIViewController class]]) {

        return nextResponder;

    } else if ([nextResponder isKindOfClass:[UIView class]]) {

        return [nextResponder traverseResponderChainForUIViewController];

    } else {

        return nil;

    }

}

六、事件传递

当一个子view需要接收点击事件,其父view也需要接收点击事件,该如何处理:

按照正常情况下,子类接收点击事件以后,事件不会主动传递到下一个响应者,因此父类便不再接收点击事件。如果子类不处理点击事件,则事件会一直传递下去,直到UIApplication。

但是我们可以使得子类处理过响应事件后仍将响应这传递到下一个响应者。但是我们编写代码才能办到。

子view的代码如下:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

// 这里可以做子view自己想做的事,做完后,事件继续上传,就可以让其父类,甚至父viewcontroller获取到这个事件了

   [[selfnextResponder]touchesBegan:toucheswithEvent:event];

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

  [[selfnextResponder]touchesEnded:toucheswithEvent:event];

}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {

  [[selfnextResponder] touchesCancelled:toucheswithEvent:event];

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

  [[selfnextResponder] touchesMoved:toucheswithEvent:event];

}

 

 

分享到:
评论
1 楼 啸笑天 2016-03-10  
/**

*  本节介绍tap的3个弄不太林清并且容易混淆的属性:

   cancelsTouchesInView/delaysTouchesBegan/delaysTouchesEnded

*   (0)首先要知道的是

        1.这3个属性是作用于GestureRecognizers(手势识别)与触摸事件之间联系的属性。实际应用中好像很少会把它们放到一起,大多都只是运用手势识别,所以这3个属性应该很少会用到。

        2.对于触摸事件,window只会有一个控件来接收touch。这个控件是首先接触到touch的并且重写了触摸事件方法(一个即可)的控件

        3.手势识别和触摸事件是两个独立的事,只是可以通过这3个属性互相影响,不要混淆。

*  (1)在默认情况下(即这3个属性都处于默认值的情况下),如果触摸window,首先由window上最先符合条件的控件(该控件记为hit-test view)接收到该touch并触发触摸事件touchesBegan。同时如果某个控件的手势识别器接收到了该touch,就会进行识别。手势识别成功之后发送触摸事件touchesCancelled给hit-testview,hit-test view不再响应touch。



* (2)cancelsTouchesInView:

    默认为YES,这种情况下当手势识别器识别到touch之后,会发送touchesCancelled给hit-testview以取消hit-test view对touch的响应,这个时候只有手势识别器响应touch。

    当设置成NO时,手势识别器识别到touch之后不会发送touchesCancelled给hit-test,这个时候手势识别器和hit-test view均响应touch。



* (3)delaysTouchesBegan:

    默认是NO,这种情况下当发生一个touch时,手势识别器先捕捉到到touch,然后发给hit-testview,两者各自做出响应。如果设置为YES,手势识别器在识别的过程中(注意是识别过程),不会将touch发给hit-test view,即hit-testview不会有任何触摸事件。只有在识别失败之后才会将touch发给hit-testview,这种情况下hit-test view的响应会延迟约0.15ms。



* (4)delaysTouchesEnded:

    默认为YES。这种情况下发生一个touch时,在手势识别成功后,发送给touchesCancelled消息给hit-testview,手势识别失败时,会延迟大概0.15ms,期间没有接收到别的touch才会发送touchesEnded。如果设置为NO,则不会延迟,即会立即发送touchesEnded以结束当前触摸。

*/

相关推荐

    三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制

    三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制,快速反馈与教程包含,三菱FX3G FX3S 485协议通讯四台三菱E700变频器程序资料 三菱FX3G FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转,停止,频率的设定,频率,电流等的读取。 反馈快,使用方便,包括教程,plc和触摸屏程序,变频器参数设置和接线,别的变频器支持rtu协议也可以实现。 ,三菱FX系列PLC; 485协议通讯; 变频器E700; 通讯控制; 参数设置; 教程。,三菱PLC控制E700变频器:485协议通讯与程序设置全解

    hyphen-nl-0.20050617-10.el7.x64-86.rpm.tar.gz

    1、文件内容:hyphen-nl-0.20050617-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/hyphen-nl-0.20050617-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏

    西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏程序协同运作。,西门子S7-1200PLC结构化编程5轴伺服项目 ,包含plc程序、威纶通触摸屏程序、cad电气图纸。 可以实现以下功能,规格有: 1.三轴机械手X轴-Y轴-Z轴联动取放料PTO脉冲定位控制台达B2伺服 2.台达伺服速度模式应用+扭矩模式应用实现收放卷 3.程序为结构化编程,每一功能为模块化设计,功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警. 4.每个功能块可以无数次重复调用,可以建成库,用时调出即可 5.上位机采样威纶通触摸屏 6.参考本案例熟悉掌握结构化编程技巧,扩展逻辑思维。 博图14以上都可以打开 ,核心关键词:西门子S7-1200PLC; 结构化编程; 5轴伺服项目; PLC程序; 威纶通触摸屏程序; CAD电气图纸; 三轴机械手; PTO脉冲定位控制; 台达B2伺服; 速度模式应用; 扭矩模式应用; 模块化设计; 轴断电保

    情感分析算法的关键应用领域与典型实战案例

    情感分析算法在多个领域有着广泛的应用场景和丰富的案例

    基于MATLAB仿真的MMC整流站与逆变站柔性互联技术研究:快速工况仿真与环流抑制控制,基于MATLAB仿真的MMC整流站与逆变站运行分析及四端柔性互联工况仿真模拟研究,21电平MMC整流站、MMC逆

    基于MATLAB仿真的MMC整流站与逆变站柔性互联技术研究:快速工况仿真与环流抑制控制,基于MATLAB仿真的MMC整流站与逆变站运行分析及四端柔性互联工况仿真模拟研究,21电平MMC整流站、MMC逆变站、两端柔性互联的MATLAB仿真模型,4端柔性互联、MMC桥臂平均值模型、MMC聚合模型(四端21电平一分钟即能完成2s的工况仿真) 1-全部能正常运行,图四和图五为仿真波形 2-双闭环控制,逆变站PQ控制,整流站站Udc Q控制 3-最近电平逼近调制+子模块电容充电 4-环流抑制控制 ,1. 21电平MMC整流站; 2. MMC逆变站; 3. MATLAB仿真模型; 4. 两端柔性互联; 5. 桥臂平均值模型; 6. 聚合模型; 7. 双闭环控制; 8. 最近电平逼近调制; 9. 子模块电容充电; 10. 环流抑制控制。,基于柔性互联的MMC系统仿真模型:多电平控制与环流抑制研究

    有效应对网络舆情教育培训PPT.pptx

    有效应对网络舆情教育培训PPT.pptx

    高光谱解混和图片去噪 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    【轴承压力】基于matlab GUI止推轴承压力计算【含Matlab源码 12069期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    娱乐小工具微信小程序源码下载支持多种流量主.zip

    淘宝买的,直接分享给大家了,没有测试环境,也没有办法去测。但我想,他应该是可以用的

    基于A、RBFS 和爬山算法求解 TSP问题 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    ACM比赛经验分享(基础知识与算法准备等).zip

    ACM比赛经验分享(基础知识与算法准备等)

    基于matlab平台的芯片字符识别.zip

    运行GUI版本,可二开

    比例-积分-微分 (PID) 鲁棒控制及电流反馈以确保 UPS 的稳定性 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    机器学习(预测模型):包含恶意网址的数据库或数据集

    该是指包含恶意网址的数据库或数据集,它通常被用于网络安全研究、恶意软件检测、网络欺诈防范等领域。研究人员和安全专家会利用这个数据集来分析恶意网址的特征、行为模式,进而开发出相应的检测算法和防护措施,以识别和阻止恶意网址对用户设备和网络环境造成的潜在威胁。该数据集包含约 651,191 条经过标记的 URL,涵盖了四种主要类型:良性(Benign)、篡改(Defacement)、钓鱼(Phishing)和恶意软件(Malware)。其中,良性 URL 占据了约 428,103 条,篡改 URL 有 96,457 条,钓鱼 URL 为 94,111 条,而恶意软件 URL 则有 32,520 条。该数据集的显著特点是其多类别分类的全面性,不仅包括常见的恶意 URL 类型,还涵盖了大量良性 URL,使得研究人员能够更全面地理解和区分不同类型的 URL。此外,数据集以原始的 URL 形式提供,研究人员可以根据需要提取和创建特征,而不受预设特征的限制。

    集字卡v4.3.4微信公众号原版三种UI+关键字卡控制+支持强制关注.zip

    字卡v4.3.4 原版 三种UI+关键字卡控制+支持获取用户信息+支持强制关注 集卡模块从一开始的版本到助力版本再到现在的新规则版本。 集卡模块难度主要在于 如何控制各种不同的字卡组合 被粉丝集齐的数量。 如果不控制那么一定会出现超过数量的粉丝集到指定的字卡组合,造成奖品不够的混乱,如果大奖价值高的话,超过数量的粉丝集到大奖后,就造成商家的活动费用超支了。我们冥思苦想如何才能限制集到指定字卡组合的粉丝数,后我们想到了和支付宝一样的选一张关键字卡来进行规则设置的方式来进行限制,根据奖品所需的关键字卡数,设定规则就可以控制每种奖品所需字卡组合被粉丝集到的数量,规则可以在活动进行中根据需要进行修改,活动规则灵活度高。新版的集卡规则,在此次政府发布号的活动中经受了考验,集到指定字卡组合的粉丝没有超出规则限制。有了这个规则限制后,您无需盯着活动,建好活动后就无人值守让活动进行就行了,您只需要时不时来看下蹭蹭上涨的活动数据即可。 被封? 无需担心,模块内置有防封功能,支持隐藏主域名,显示炮灰域名,保护活动安全进行。 活动准备? 只需要您有一个认证服务号即可,支持订阅号借用认证服务号来做活动。如果您

    DSP28035的CAN通信升级方案:包括源码、测试固件与C#上位机开发,支持周立功USBCAN-II兼容盒及BootLoader闪烁指示,DSP28035的CAN升级方案及详细配置说明:使用新动力开

    DSP28035的CAN通信升级方案:包括源码、测试固件与C#上位机开发,支持周立功USBCAN-II兼容盒及BootLoader闪烁指示,DSP28035的CAN升级方案及详细配置说明:使用新动力开发板与C#上位机软件实现固件升级,涉及用户代码、BootLoader代码及硬件连接细节,DSP28035的can升级方案 提供源代码,测试用固件。 上位机采用c#开发。 说明 一、介绍 1、测试平台介绍:采用M新动力的DSP28035开发板,CAN口使用GPIO30\31。波特率为500K。 2、28035__APP为测试用的用户代码,ccs10.3.1工程,参考其CMD配置。 3、28035_Bootloader_CAN为bootloader源代码,ccs10.3.1工程; 4、SWJ为上位机,采用VS2013开发,C#语言。 5、测试使用的是周立功的USBCAN-II,can盒,如果用一些国产可以兼容周立功的,则更这里面的ControlCAN.dll即可。 6、升级的app工程需要生成hex去升级,具体参考我给的工程的设置。 7、BootLoader代码,只有D400这一个灯1s闪烁一

    基于Matlab的数字验证码识别系统:预处理与不变矩算法的实践应用及GUI界面构建,基于MATLAB不变矩算法的数字验证码识别系统设计与实现,基于matlab不变矩算法实现数字验证码 过程:先对验证图

    基于Matlab的数字验证码识别系统:预处理与不变矩算法的实践应用及GUI界面构建,基于MATLAB不变矩算法的数字验证码识别系统设计与实现,基于matlab不变矩算法实现数字验证码 过程:先对验证图像进行去噪、定位、归一化等预处理,然后计算待识别数字的不变矩,再进行特征匹配,得到识别结果。 以Matlab软件为开发平台来进行设计实现及仿真,并构建相应的GUI界面。 实验结果表明利用不变矩在识别数字验证码方面具有可行性。 ,关键词:Matlab;不变矩算法;数字验证码;预处理;特征匹配;GUI界面;实验验证;可行性。,Matlab实现数字验证码识别:预处理与不变矩算法的GUI仿真

    基于STM32F103的磁编码器通讯方案:原理图、PCB设计与源码实现,附多摩川协议手册解析,基于STM32F103的精准多摩川绝对值磁编码器通讯解决方案:原理图、PCB设计与源码实践手册,完整包含多

    基于STM32F103的磁编码器通讯方案:原理图、PCB设计与源码实现,附多摩川协议手册解析,基于STM32F103的精准多摩川绝对值磁编码器通讯解决方案:原理图、PCB设计与源码实践手册,完整包含多摩川协议解析,基于STM32F103的多摩川绝对值磁编码器通讯方案 包含:原理图,PCB,源码,多摩川协议手册 ,核心关键词:STM32F103;多摩川绝对值磁编码器;通讯方案;原理图;PCB;源码;多摩川协议手册;,基于STM32F103的绝对值磁编码器通讯方案:原理图PCB与源码解析,附多摩川协议手册

    基于 BP 神经网络特征提取的指纹识别应用 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    php项目之学生成绩查询系统源码.zip

    php项目之学生成绩查询系统源码,项目仅供学习参考使用

Global site tag (gtag.js) - Google Analytics