OC 实现手指滑动拖动View
RPReplay_Final1699613924
实现手指滑动拖动View
支持手势移动的控件 支持 Masonry frame 布局 使用富文本 也支持自动高度
核心代码
- (void)handlePanGesture:(UIPanGestureRecognizer *)p {CGPoint panPoint = [p locationInView:self.view];CGPoint currentViewPoint = _dragView.center;if (p.state == UIGestureRecognizerStateBegan) {_originalPoint = panPoint;} else if(p.state == UIGestureRecognizerStateChanged) {CGFloat moveCenterY = panPoint.y - _originalPoint.y;CGFloat moveCenterX = panPoint.x - _originalPoint.x;_moveY += moveCenterY;_moveX += moveCenterX;[self.dragView mas_updateConstraints:^(MASConstraintMaker *make) {make.centerY.mas_equalTo(self.view.mas_centerY).offset(_moveY);make.centerX.mas_equalTo(self.view.mas_centerX).offset(_moveX);}];//使用 frame 的话 这样布局//self.forecastGroupView.center = CGPointMake(currentViewPoint.x + moveCenterX, currentViewPoint.y + moveCenterY);_originalPoint = panPoint;} else if (p.state == UIGestureRecognizerStateEnded|| p.state == UIGestureRecognizerStateCancelled) {CGFloat groupViewHeight = _dragView.frame.size.height;CGFloat groupViewWidth = _dragView.frame.size.width;CGFloat parentViewHeight = self.view.frame.size.height;CGFloat parentViewWidth = self.view.frame.size.width;CGFloat centerY = 0.0;BOOL edit = NO;if (currentViewPoint.y < groupViewHeight/2) {centerY = groupViewHeight/2;_moveY = -(parentViewHeight - groupViewHeight)/2;edit = YES;} else if (currentViewPoint.y > parentViewHeight - groupViewHeight/2) {_moveY = centerY;_moveY = (parentViewHeight - groupViewHeight)/2;edit = YES;} else {centerY = currentViewPoint.y;}CGFloat centerX = 0.0;if (currentViewPoint.x < groupViewWidth/2) {centerX = groupViewWidth/2;_moveX = -(KWidth - groupViewWidth)/2;edit = YES;} else if (currentViewPoint.x > parentViewWidth - groupViewWidth/2) {centerX = parentViewWidth - groupViewWidth/2;_moveX = (KWidth - groupViewWidth)/2;edit = YES;} else {centerX = currentViewPoint.x;}if(edit) {WeakSelf[UIView animateWithDuration:.25 animations:^{//使用 frame 的话 这样布局//self.forecastGroupView.center = CGPointMake(centerX, centerY);[weakSelf.dragView mas_updateConstraints:^(MASConstraintMaker *make) {make.centerY.mas_equalTo(self.view.mas_centerY).offset(self->_moveY);make.centerX.mas_equalTo(self.view.mas_centerX).offset(self->_moveX);}];} completion:^(BOOL finished) {}];}} else {NSLog(@" pan state : %zd", p.state);}
}
连接
UI交互 dome: iOS OC 部分UI交互 dome - Gitee.com
相关文章:
OC 实现手指滑动拖动View
RPReplay_Final1699613924 实现手指滑动拖动View 支持手势移动的控件 支持 Masonry frame 布局 使用富文本 也支持自动高度 核心代码 - (void)handlePanGesture:(UIPanGestureRecognizer *)p {CGPoint panPoint [p locationInView:self.view];CGPoint currentViewPoint _dr…...
多级缓存之实现多级缓存
多级缓存的实现离不开Nginx编程,而Nginx编程又离不开OpenResty。 1. OpenResty快速入门 我们希望达到的多级缓存架构如图: 其中: windows上的nginx用来做反向代理服务,将前端的查询商品的ajax请求代理到OpenResty集群 OpenRest…...
React【axios、全局处理、 antd UI库、更改主题、使用css module的情况下修改第三方库的样式、支持sass less】(十三)
文件目录 Proxying in Development http-proxy-middleware fetch_get fetch 是否成功 axios 全局处理 antd UI库 更改主题 使用css module的情况下修改第三方库的样式 支持sass & less Proxying in Development 在开发模式下,如果客户端所在服务器跟后…...
在gitlab中指定自定义 CI/CD 配置文件
文章目录 1. 介绍2. 配置操作3. 配置场景3.1 CI/CD 配置文件在当前项目step1:在当前项目中创建目录,编写流水线文件存放在该目录中step2:在当前项目中配置step3:运行流水线测试 3.2 CI/CD 配置文件位于外部站点上step1:…...
(论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
文献阅读笔记 简介 题目 Learning a Deep Compact Image Representation for Visual Tracking 作者 N Wang, DY Yeung 原文链接 Learning a Deep Compact Image Representation for Visual Tracking (neurips.cc) 关键词 Object tracking、DLT、SDAE 研究问题 track…...
浅谈设计模式
文章目录 一、单例模式 1.饿汉模式 2.懒汉模式 二、工厂模式 三、建造者模式 四、代理模式 设计模式是前辈们对代码开发的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解…...
企业年会/年终活动如何邀请媒体记者报道?
媒体邀约是企业或组织进行宣传的重要手段之一。通过邀请媒体参加活动,可以增加活动的曝光度和知名度,吸引更多的关注和参与。同时,媒体报道还可以提高企业或组织的权威性和可信度,从而让公众更容易接受其传达的信息。 企业年会或…...
C语言如何执行HTTP GET请求
在现代互联网时代,网络数据的获取和分析变得越来越重要。无论是为了研究市场趋势,还是为了收集信息进行数据分析,编写一个网络爬虫可以帮助我们自动化这一过程。在这篇文章中,我们将使用C语言和libcurl库来编写一个简单的网络爬虫…...
.Net 6 Nacos日志控制台疯狂发输出+Log4Net日志过滤
我们的项目配置了Log4Net 作为日志输出工具,在引入Nacos后,控制台和日志里疯狂输出nacos心跳日志和其他相关信息,导致自己记录的信息被淹没了,找了很多解决办法: 1、提高nacos日志级别,然后再屏蔽相应级别…...
Libra R-CNN: Towards Balanced Learning for Object Detection(2019.4)
文章目录 AbstractIntroduction引入问题1) Sample level imbalance2) Feature level imbalance3) Objective level imbalance进行解决贡献 Related Work(他人的work,捎带与我们的对比)Model architectures for object detection&a…...
Redis的内存淘汰策略分析
概念 LRU 是按访问时间排序,发生淘汰的时候,把访问时间最久的淘汰掉。LFU 是按频次排序,一个数据被访问过,把它的频次 1,发生淘汰的时候,把频次低的淘汰掉。 几种LRU策略 以下集中LRU测率网上有很多&am…...
git命令之遭遇 ignore罕见问题解决
我先来讲讲背景 我的一些文件在ignore了,不会被提交到远程仓库,这时候我的远程仓库中是没有这几个文件的,这时候我如果使用 git reset 的话这时候除了那几个 ignore 的文件以外都被更新的,但是如果我不需要这几个被 ignore 的文件…...
torch DDP多卡训练教程记录
参考 简明教程看这里 --> pytorch分布式训练 和这篇: [PyTorch]> DDP系列第一篇:入门教程 --》 详细解答了pipeline DDP原理篇 --> DDP系列第二篇:实现原理与源代码解析 --》 主要讲 all_reduce 和 sample 的实现 减少GPU占用看这里…...
Jenkins CICD过程常见异常
1 Status [126] Exception when publishing, exception message [Exec exit status not zero. Status [126] 1.1 报错日志 SSH: EXEC: STDOUT/STDERR from command [/app/***/publish.sh] ... bash: /app/***/publish.sh: Permission denied SSH: EXEC: completed after 200…...
Java11新增特性
前言 在前面的文章中,我们已经介绍了 Java9的新增特性 和 Java10的新增特性 ,下面我们书接上文,来介绍一下Java11的新增特性 版本简介 Java 11 是 Java 平台的最新版本,于2018年9月25日发布。这个版本是自Java 8以来最重要的更新之一&…...
安卓常见设计模式13------过滤器模式(Kotlin版)
W1 是什么,什么是过滤器模式? 过滤器模式(Filter Pattern)是一种常用的结构型设计模式,用于根据特定条件过滤和筛选数据。 2. W2 为什么,为什么需要使用过滤器模式,能给我们编码带来什么好处…...
使用spark进行递归的可行方案
在实际工作中会遇到,最近有需求将产品炸开bom到底层,但是ERP中bom数据在一张表中递归存储的,不循环展开,是无法知道最底层原材料是什么。 在ERP中使用pl/sql甚至sql是可以进行炸BOM的,但是怎么使用spark展开࿰…...
Spring -Spring之依赖注入源码解析(下)--实践(流程图)
IOC依赖注入流程图 注入的顺序及优先级:type-->Qualifier-->Primary-->PriOriry-->name...
前端设计模式之【单例模式】
文章目录 前言介绍实现单例模式优缺点?后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端设计模式 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出…...
设备零部件更换ar远程指导系统加强培训效果
随着科技的发展,AR技术已经成为了一种广泛应用的新型技术。AR远程指导系统作为AR技术的一种应用,具有非常广泛的应用前景。 一、应用场景 气象监测AR教学软件适用于多个领域,包括气象、环境、地理等。在教学过程中,软件可以帮助学…...
FPGA实战避坑:从一次复位信号不稳定说起,手把手教你实现异步复位同步释放
FPGA复位设计实战:从亚稳态陷阱到异步复位同步释放的完整解决方案 复位信号:FPGA设计的隐形守护者 在FPGA开发中,复位信号就像交响乐团的指挥棒,确保所有寄存器从已知状态开始协调工作。我曾在一个图像处理项目中遇到诡异现象&…...
AI斗地主助手:3步快速部署的终极智能出牌方案
AI斗地主助手:3步快速部署的终极智能出牌方案 【免费下载链接】DouZero_For_HappyDouDiZhu 基于DouZero定制AI实战欢乐斗地主 项目地址: https://gitcode.com/gh_mirrors/do/DouZero_For_HappyDouDiZhu 想要在欢乐斗地主中轻松获胜吗?基于DouZero…...
告别Surface Pro蓝牙抽风:一个计划任务+PowerShell脚本的保姆级配置指南
Surface Pro蓝牙故障终极解决方案:零基础自动化修复指南 每次打开Surface Pro都发现蓝牙设备无法连接?重启后鼠标键盘集体罢工?这个困扰Surface用户多年的顽疾,其实只需要20分钟就能彻底解决。今天分享的方案不需要下载任何第三方…...
DoL-Lyra构建系统:游戏模组自动化打包的解决方案
DoL-Lyra构建系统:游戏模组自动化打包的解决方案 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 在游戏模组开发领域,如何高效管理多版本、多平台的模组打包一直是个技术难题…...
FreeRTOS临界区避坑指南:taskENTER_CRITICAL()用不对,你的系统可能随时崩溃
FreeRTOS临界区避坑指南:taskENTER_CRITICAL()用不对,你的系统可能随时崩溃 调试嵌入式系统时最令人抓狂的瞬间,往往是那些看似毫无规律的随机崩溃——比如某个传感器数据偶尔错位、系统突然卡死、或是中断服务程序莫名丢失事件。上周我就遇到…...
新手入门不迷路:我花一周整理的神经网络工作原理通俗笔记,看完就能懂
引言 不知道有没有和我当初一样的朋友,刚接触深度学习的时候,信心满满翻开《深度学习》花书,刚看了两章神经元,满页的偏导、矩阵乘法直接给我干懵了。合上书脑子里就一个想法:神经网络这玩意儿是不是给天才准备的&…...
别再只把ONNX当‘中间件’了:聊聊模型可视化、编辑与轻量化那些事
别再只把ONNX当“中间件”了:解锁模型可视化、编辑与轻量化的高阶玩法 当你在PyTorch训练完一个图像分类模型,或是从开源社区下载了一个TensorFlow预训练模型,下一步是什么?大多数工程师会条件反射般地想到“转ONNX格式”——这个…...
Arduino新手避坑指南:面包板电路搭建最常见的5个错误(附解决方案)
Arduino面包板实战避坑手册:从5个经典错误中掌握电路搭建精髓 当你第一次把Arduino和面包板从包装盒里拿出来时,那种兴奋感就像拿到新玩具的孩子。但很快,当LED死活不亮、电路毫无反应时,这种兴奋可能就会变成沮丧。别担心&#x…...
抖音下载器终极指南:免费批量下载无水印视频的完整解决方案
抖音下载器终极指南:免费批量下载无水印视频的完整解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...
LiuJuan Z-Image Generator代码实例:API化封装供内部系统调用的FastAPI示例
LiuJuan Z-Image Generator代码实例:API化封装供内部系统调用的FastAPI示例 1. 项目背景与需求 如果你正在使用LiuJuan Z-Image Generator这个强大的本地图片生成工具,可能会遇到这样一个场景:团队里的设计师、运营同事,或者公司…...
