ios实现类似魔兽小地图功能 在
写了一个类似魔兽小地图功能的控件。
比如你有一个可以放大缩小的scrollView。会在里面进行一些放大缩小,点击里面的按钮呀,等操作。
这个小地图控件。就会和你的大scrollView同步。并有缩略图和你当前视口的位置。就像游戏里那样。
看图。
SmallMapView.h
// // SmallMapView.h // littleMapView // // Created by fuqiang on 13-7-2. // Copyright (c) 2013年 fuqiang. All rights reserved. // #import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h>@interface SmallMapView : UIView//缩放比例 @property (nonatomic,assign,readonly)float scaling;//标示窗口位置的浮动矩形 @property (nonatomic,retain,readonly)CALayer *rectangleLayer;//内容 @property (nonatomic,retain,readonly)CALayer *contentLayer;//被模拟的UIScrollView @property (nonatomic,retain,readonly)UIScrollView *scrollView;//init - (id)initWithUIScrollView:(UIScrollView *)scrollView frame:(CGRect)frame;//在UIScrollView的scrollViewDidScroll委托方法中调用 - (void)scrollViewDidScroll:(UIScrollView *)scrollView;//重绘View内容(需要注意。如果在调用reloadSmallMapView 方法的时候,需要更新的内容内有动画。如按钮变色等) //请用[self performSelector:@selector(reloadSmallMapView:) withObject:nil afterDelay:0.2]; - (void)reloadSmallMapView; @end
SmallMapView.m
// // SmallMapView.m // littleMapView // // Created by fuqiang on 13-7-2. // Copyright (c) 2013年 fuqiang. All rights reserved. // #import "SmallMapView.h"@implementation SmallMapView- (id)initWithUIScrollView:(UIScrollView *)scrollView frame:(CGRect)frame {self = [super init];if (self) {_scrollView = scrollView;//设置缩略图View尺寸 [self setFrame:frame];//设置缩略图缩放比例 [self setScaling:_scrollView];//设置罗略图内容_contentLayer = [self drawContentView:_scrollView frame:frame];[self.layer addSublayer:_contentLayer];//初始化缩略移动视口_rectangleLayer = [[CALayer alloc] init];_rectangleLayer.opacity = 0.5;_rectangleLayer.shadowOffset = CGSizeMake(0, 3);_rectangleLayer.shadowRadius = 5.0;_rectangleLayer.shadowColor = [UIColor blackColor].CGColor;_rectangleLayer.shadowOpacity = 0.8;_rectangleLayer.backgroundColor = [UIColor whiteColor].CGColor;_rectangleLayer.frame = CGRectMake(0, 0, scrollView.frame.size.width * _scaling, scrollView.frame.size.height * _scaling);[self.layer addSublayer:_rectangleLayer];}return self; }- (void)dealloc {[_rectangleLayer release];[super dealloc]; }//------ - (void)scrollViewDidScroll:(UIScrollView *)scrollView {[self setScaling:scrollView];float x = scrollView.contentOffset.x;float y = scrollView.contentOffset.y;float h = scrollView.frame.size.height;float w = scrollView.frame.size.width;[self.rectangleLayer setFrame:CGRectMake(x * _scaling, y * _scaling, h * self.scaling, w * self.scaling)]; }//重绘View内容 - (void)reloadSmallMapView {[_contentLayer removeFromSuperlayer];_contentLayer = [self drawContentView:_scrollView frame:self.frame];[self.layer insertSublayer:_contentLayer atIndex:0]; }//设置缩略图缩放比例 - (void)setScaling:(UIScrollView *)scrollView {_scaling = self.frame.size.height / scrollView.contentSize.height; }//复制UIScrollView中内容 - (CALayer *)drawContentView:(UIScrollView *)scrollView frame:(CGRect)frame {[self setScaling:scrollView];CALayer *layer = [[CALayer alloc] init];layer.frame = frame;for (UIView *view in scrollView.subviews){UIGraphicsBeginImageContext(view.bounds.size);[view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();CALayer *copyLayer = [CALayer layer];copyLayer.contents = (id)image.CGImage;float x = view.frame.origin.x;float y = view.frame.origin.y;float h = view.frame.size.height;float w = view.frame.size.width;copyLayer.frame = CGRectMake(x * _scaling,y *_scaling,w * _scaling,h * _scaling);[layer addSublayer:copyLayer];}return [layer autorelease]; } @end
如果有需要的,可以去这里得到源码:https://github.com/TinyQ/LittleMapView.git
转载于:https://www.cnblogs.com/CCSSPP/p/3201044.html
ios实现类似魔兽小地图功能 在相关推荐
- iOS开发-类似微信录音上滑取消功能
iOS开发-类似微信录音上滑取消功能 前言 效果 代码 先自定义UIButton 使用 监听上下滑动代码 前言 在社交媒体中开发中遇到需要做类似微信录音上滑取消功能,例子,虽然不是很好看,但是细节满满 ...
- iOS语音直播SDK及功能实现流程
语音直播场景的典型使用案例是同一房间内的成员,进行语音直播,有需要时也可进行实时语音通话.Zego 提供了对语音直播场景的支持,此文讲述如何在iOS环境下利用即构SDK快速实现语音直播功能. 实现播放 ...
- Unity_实现小地图功能
在Unity中,模拟类似英雄联盟和csgo中 左上角小地图的功能 思路:在游戏中,玩家有两个视角,一个是玩家的游戏主视角,一个是小地图的视角,每个视角所看到的画面是不一样的,我们只需要创建两个摄像机, ...
- Mac——技巧:如何在iPhone 上获取 iOS 15 的实时文本功能
尽管目前的iOS 15只是一个测试版本,但是它已经足够让我们惊喜了,无论是FaceTime的屏幕共享功能还是最新的聚焦模式,实际上都能在很大程度上改变我们手机体验的方式,而且从目前的效果来看,这种方式 ...
- 【转】在OpenGL场景中实现小地图功能
http://www.c3dn.net/archiver/?tid-48.html 想象一下,我们在原始森林里寻找宝藏,没有地图,没有GPS,那结果应该只有一种:不但找不到目标地点,而且很容易迷失方向 ...
- iOS蓝牙BLE4.0通信功能
概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...
- ios 扫码枪外设 键盘模式_苹果iOS 13新增滑行键入功能 开启新键盘模式
滑行输入又称扫屏输入,是近年触摸屏幕/触摸键盘上流行的输入技术,它的特点是:你只需要在要录入单词的几个字母之间滑行,系统词库就能把你需要的单词给找出来,无需考虑顺序.排列.冗余甚至无需考虑多输入进去的 ...
- 【高德LBS开源组件大赛】iOS版地图选中Overlay功能组件
2019独角兽企业重金招聘Python工程师标准>>> ##开源组件名称 iOS版地图选中Overlay功能组件 ##开源组件说明及使用场景 提供在iOS版地图中选中Overlay ...
- ios6.1.6可用微信_这是iOS 12.1的新增功能,今天可用
ios6.1.6可用微信 While iOS 12 is still fairly fresh, the first point release will be rolling out startin ...
- Swift实现iOS录音与播放音频功能
Swift实现iOS录音与播放音频功能 作用 AVPLayer:可以用来播放在线及本地音视频 AVAudioSession:音频会话,主要用来管理音频设置与硬件交互 使用时需要导入 #import & ...
最新文章
- Android性能优化工具
- 嫌微软要价“太狠” 东莞网吧巨头拒绝付费
- hibernate_day03_一对多相关操作
- 以实际产品为例, 进行软件工程训练的作业
- 聚合项目访问后台接口失败_【2020】Scry 8月项目进度月报
- 征途手游2新开区服务器维护多久,《征途2手游》开启新服“星火燎原”
- linux中c语言常用内嵌汇编
- ctypealpha php_PHP Ctype函数(转)
- 小程序报错:Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail req..
- vs 2017 查看dll源代码
- FIFO IP核的使用
- 微信小程序 09 前后端交互
- 这才是2019年最新资料!
- 编写一个“绘画系统”
- (1)Terminal 终端终结者——安装和使用快捷键
- 捞王二闯IPO,谁是“火锅第三股“?||Review
- 联想拯救者刃7000P跑分与加装内存条和SSD固态硬盘
- 计算机网络资料整理《谢希仁版》
- 集合数据hdu1272(小希迷宫 并查集)
- Received status code 400 from server: Bad Request解决方案