ios实现类似魔兽小地图功能 在
2013-07-19 18:00
381 查看
写了一个类似魔兽小地图功能的控件。
比如你有一个可以放大缩小的scrollView。会在里面进行一些放大缩小,点击里面的按钮呀,等操作。
这个小地图控件。就会和你的大scrollView同步。并有缩略图和你当前视口的位置。就像游戏里那样。
看图。
SmallMapView.h
如果有需要的,可以去这里得到源码:https://github.com/TinyQ/LittleMapView.git
比如你有一个可以放大缩小的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; @endSmallMapView.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
相关文章推荐
- ios实现类似魔兽小地图功能 在
- ios实现类似魔兽小地图功能 在
- Android仿iOS实现侧滑返回功能(类似微信)
- iOS开发——高级技术&调用地图功能的实现
- iOS 中用Stepper控件实现地图缩放功能(即按钮实现地图缩放功能)
- IOS 实现边滑动边缩放的类似qq主界面的页面切换功能
- iOS 高德室内地图导航功能的简单实现
- IOS 实现边滑动边缩放的类似qq主界面的页面切换功能
- 【学习ios之路:C语言】小程序:实现类似ATM取款机功能.
- IOS开发之——类似微信摇一摇的功能实现
- iOS开发——高级技术&地图功能的实现
- iOS地图及定位功能基本实现的详尽描述
- IOS 实现以图查图 类似百度查图功能
- android如何实现类似ios点击状态栏回到顶部功能
- iOS地图定位功能的实现(解决代理方法不执行问题,解决默认定位苹果总部问题)
- 需求:iOS自定义protocol与delegate来实现类似java的接口回调功能
- IOS 实现以图查图 类似百度查图功能
- iOS中地图功能的实现
- iOS 实现类似微博或者陌陌上的显示附近位置信息功能。
- 实现类似iOS拍照的按钮滑动功能