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 ...
随机推荐
- Python性能分析指南
http://www.admin10000.com/document/2861.html 尽管并非每个你写的Python程序都需要严格的性能分析,但了解一下Python的生态系统中很多优秀的在你需要做 ...
- HDU 3038 How Many Answers Are Wrong(带权并查集)
太坑人了啊,读入数据a,b,s的时候,我刚开始s用的%lld,给我WA. 实在找不到错误啊,后来不知怎么地突然有个想法,改成%I64d,竟然AC了 思路:我建立一个sum数组,设i的父亲为fa,sum ...
- ios 关于StoryBoard 的简易使用说明
ios 关于StoryBoard 的简易使用说明 http://www.tuicool.com/articles/FNRruy
- Bash 小知识点
变量定义的时候=两边不能有空格,例如: a='Hello World' 如果变量和其它字符相连,可以用{}把变量引起来,这样就可以和相连的字符隔离 除了在变量赋值和在FOR循环语句头中,BASH中的变 ...
- MAC 上升级python为最新版本
第1步:下载Python3.4 下载地址如下: 下载Mac OS X 64-bit/32-bit installer https://www.python.org/downloads/release/ ...
- 1.Spring IoC简单例子
Spring IoC简单例子 1.IHelloMessage.java package com.tony.spring.chapter01; public interface IHelloMessag ...
- JVM最多可创建多少线程
JVM可支持的最大线程数 JVM最大线程数 (2012-07-04 23:20:15) 转载▼ 标签: jvm 最大线程数 it 分类: java分布式总结 摘自:http://sesame.itey ...
- Android Andbase应用开发框架
[运行说明]运行AndbaseDemo需要将文件中的Andbase库Add进demo中.1.andbase中包含了大量的开发常用手段.如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片 ...
- JDBC学习总结(四)
JDBC对LOB的读写 在JDBC中提供了java.sql.Blob和java.sql.Clob,两个类分别代表BLOB和CLOB数据. · BLOB(Binary Large Obj ...
- Java中boolean型变量的默认值问题
1.首先分析Java中的三种不同变量的区别,如下表所示 概念 默认值 其他 类变量 也叫静态变量,是类中独立于方法之外的变量 用static 修饰 有默认初始值,系统自动初始化. 如boolean ...