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(, );
_rectangleLayer.shadowRadius = 5.0;
_rectangleLayer.shadowColor = [UIColor blackColor].CGColor;
_rectangleLayer.shadowOpacity = 0.8;
_rectangleLayer.backgroundColor = [UIColor whiteColor].CGColor;
_rectangleLayer.frame = CGRectMake(, , 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:];
} //设置缩略图缩放比例
- (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
ios实现类似魔兽小地图功能 在的更多相关文章
- Jquery打造的类似新浪微博@提醒功能
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python面向对象进阶 反射 单例模式 以及python实现类似java接口功能
本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...
- 改进iOS客户端的升级提醒功能
改进iOS客户端的升级提醒功能 功能设计 先申明一下,我是码农,不是一个产品经理,但我觉得现有市面上的很多 App,设计的 "升级提示功能" 都不太友好.在此分享一下我的想法,欢迎 ...
- iOS 用UISearchDisplayController实现查找功能
UISearchDisplayController是iOS中用于处理搜索功能的控制器,此控制器需要和UISearchBar结合使用 示例代码如下: // // WKRootViewController ...
- js/jQuery实现类似百度搜索功能
一.页面代码:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...
- pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questi ...
- iOS Swift WisdomScanKit图片浏览器功能SDK
iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介 WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...
- iOS蓝牙BLE4.0通信功能
概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...
- ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)
ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...
随机推荐
- 2016,除了 DevOps,企业还应该知道 CMDB!
CMDB 是 Configuration Management Database(配置管理数据库)的简称,CMDB 存储与管理企业 IT 架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密 ...
- HDU 3047 Zjnu Stadium(带权并查集)
题意:有一个环形体育场,有n个人坐,给出m个位置关系,A B x表示B所在的列在A的顺时针方向的第x个,在哪一行无所谓,因为假设行有无穷个. 给出的座位安排中可能有与前面矛盾的,求有矛盾冲突的个数. ...
- HUSTOJ(转发)
来源:http://blog.csdn.net/xiajian2010/article/details/12954855 缘起 大四了,快毕业了,所以想准备点LAMP的知识和经验.刚好实验室里有人在搞 ...
- lintcode 中等题:find the missing number 寻找缺失的数
题目 寻找缺失的数 给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数. 样例 N = 4 且序列为 [0, 1, 3] 时,缺失的数为2. 注意 可以改变序 ...
- lintcode :reverse integer 颠倒整数
题目: 颠倒整数 将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数). 样例 给定 x = 123,返回 321 给定 x = -123,返回 -321 解题: 直接 ...
- Zookeeper安装部署
Zookeeper安装 1. 安装 wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz ...
- REACTOS(193)与汇编编译器(69)的高人
REACTOS(193)与汇编编译器(69)的高人http://blog.csdn.net/caimouse ReactOS编译成VS工程1: 首先从https://www.reactos.org/w ...
- [iOS]iPhone利用<极光推送>实现远程推送
准备: 1. 一个Xcode工程 2. 开发者账号 3. 真机 (重要,模拟器无法进行远程推送,因为模拟器没有UDID) 第一步:绑定工程的Bundle Identifer 首先当然要登录https: ...
- NSArray 迭代
NSObject *obj=[[NSObject alloc]init]; NSArray *array=[[NSArray alloc] initWithObjects:@" ...
- 实例学习Bloom Filter
0. 科普1. 为什么需要Bloom Filter2. 基本原理3. 如何设计Bloom Filter4. 实例操作5. 扩展 0. 科普 Bloom Filter是由Bloom在1970年提出的一种 ...