应用程序开发之模仿史上最牛游戏(二)

  声明:转载请注明http://www.cnblogs.com/letougaozao/p/3708887.html

  • 新建关卡控制器

  • 自定义UIScrollView

  • 增加UIPageView

  • 每个关卡的View

整体效果展示

一、新建关卡控制器

1??拖线

-修改控制器class

-修改控制器的View的class(方便设置背景)

-装资源文件

-返回按钮



二、自定义UIScrollView

1??在初始化方法里面做一些事情

-添加四张背景图片

1.创建四个FullView

2.将这四个view加入到scrollview里面(封装成方法)


#pragma mark -加载图片
- (void)loadViews
{
[self addView:@"select_easy_bg.jpg" index:0];
[self addView:@"select_normal_bg.jpg" index:1];
[self addView:@"select_hard_bg.jpg" index:2];
[self addView:@"select_insane_bg.jpg" index:3];
}
#pragma mark加载图片
- (void)addView:(NSString*)viewName index:(int)index
{
CGSize size = self.frame.size;
BgView *bg = [[BgView alloc]initWithFrame:CGRectMake(size.width * index, 0, size.width, size.height)];
[bg setFullView:viewName];
[self addSubview:bg];
[self sendSubviewToBack:bg];
}

-加载关卡信息


#pragma mark - 加载关卡
- (void)loadStages
{
//1.从plist文件中加载所有的关卡
NSURL *url = [[NSBundle mainBundle]URLForResource:@"stages" withExtension:@"plist"];
NSArray *stages = [NSArray arrayWithContentsOfURL:url];

int count = stages.count;
//2.将关卡中的字典取出,并且转换成一个模型
for (int i = 0; i < count; i++) {
NSDictionary *stageDic = stages[i];

//2.1加载关卡的状态
StageRecordModel *stageRecordModel =[[StageRecordTool sharedStageRecordTool] stageRecordWithNo:i + 1];

//2.2加载关卡的信息
StageInfo *stageInfo = [StageInfo stageInfoWith:stageDic];
stageInfo.stageRecordModel = stageRecordModel;
stageInfo.stageNo = i + 1;

//2.3加载要显示的关卡的View
Stage *stageView = [[NSBundle mainBundle]loadNibNamed:@"Stage" owner:nil options:nil][0];
stageView.stageInfo = stageInfo;
stageView.tag = i + 1;

//2.4为stageView添加手势监听
[stageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(itemClick:)]];

//2.5计算每一个View所在的位置
CGRect stageFrame = stageView.frame;
CGFloat stageWidth = self.frame.size.width;
CGFloat x = (stageWidth * 4 - stageFrame.size.width * 8)/8;
stageFrame.origin.x = (stageFrame.size.width + x) * (i/3) + 27;
stageFrame.origin.y = 120 + (i%3)*(stageFrame.size.width + 7);
stageView.frame = stageFrame;

[self addSubview:stageView];
[self sendSubviewToBack:stageView];
}
}

-设置scrollView的contentSize、可滚动、去掉滚动条

//3.设置scrollView的一些属性
self.contentSize = CGSizeMake(self.frame.size.width * 4, self.frame.size.height);
self.pagingEnabled = YES;
self.showsHorizontalScrollIndicator = NO;



三、增加UIPageView

1??设置代理,监听是 scrollView的滚动

2??实现代理方法

3??设置pageView的current page

#pragma mark - 给pageView显示当前的页码
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
_pageView.currentPage = scrollView.contentOffset.x / scrollView.bounds.size.width;
}



四、关卡View(用xib描述)

1??新建Stage类

2??新建xib

3??新建一个Model和关卡信息一一对应

StageInfo.h


#import <Foundation/Foundation.h>
#import "StageRecordModel.h"

@interface StageInfo : NSObject

@property (nonatomic, copy) NSString *icon;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *intro;
@property (nonatomic, copy) NSString *format;
@property (nonatomic, copy) NSString *unit;

@property (nonatomic, assign) int stageNo;
@property (nonatomic, assign) double max;
@property (nonatomic, assign) double min;

//让关卡信息拥有一个StageRecordModel属性
@property (nonatomic, strong) StageRecordModel *stageRecordModel;

+ (StageInfo *)stageInfoWith:(NSDictionary*)dict;

@end

StageInfo.m


#import "StageInfo.h"
#define kIcon @"icon"
#define kTitle @"title"
#define kIntro @"intro"
#define kMax @"max"
#define kMin @"min"
#define kFormat @"format"
#define kUnit @"unit"

@implementation StageInfo

+ (StageInfo *)stageInfoWith:(NSDictionary *)dict
{
StageInfo *stageInfo = [[self alloc]init];

stageInfo.icon = dict[kIcon];
stageInfo.title = dict[kTitle];
stageInfo.intro = dict[kIntro];
stageInfo.format = dict[kFormat];
stageInfo.unit = dict[kUnit];
stageInfo.max = [dict[kMax] doubleValue];
stageInfo.min = [dict[kMin] doubleValue];

return stageInfo;
}

@end

4??加载关卡信息

-Stage类

stage.h


#import <UIKit/UIKit.h>
@class StageInfo;

@interface Stage : UIView

@property (nonatomic, strong) StageInfo *stageInfo;
//关卡数
@property (weak, nonatomic) IBOutlet UIButton *stageNo;
//关卡图标
@property (weak, nonatomic) IBOutlet UIImageView *stageIcon;
//关卡锁
@property (weak, nonatomic) IBOutlet UIView *stageLock;
//关卡覆盖涂层
@property (weak, nonatomic) IBOutlet UIView *stageCover;
//关卡边框
@property (weak, nonatomic) IBOutlet UIImageView *stageRim;
//新关卡
@property (weak, nonatomic) IBOutlet UIImageView *stageNew;
//关卡等级下面的阴影
@property (weak, nonatomic) IBOutlet UIImageView *stageShadow;
//关卡的等级
@property (weak, nonatomic) IBOutlet UIImageView *stageRank;

@end

stage.m


@implementation Stage
+ (id)stageViewWithStageModel:(StageInfo *)stageInfo
{
Stage *view = [[NSBundle mainBundle] loadNibNamed:@"StageView" owner:nil options:nil][0];
view.stageInfo = stageInfo;
return view;
}
#pragma mark 设置关卡信息
- (void)setStageInfo:(StageInfo *)stageInfo
{
_stageInfo = stageInfo;
// 1.设置编号
[_stageNo setTitle:[NSString stringWithFormat:@"%d", stageInfo.no] forState:UIControlStateNormal];
// 2.设置图标
_stageImage.image = [UIImage imageNamed:stageInfo.icon];
}
@end

-添加关卡到StageView界面(查看二)

应用程序开发之模仿史上最牛游戏(二),布布扣,bubuko.com

时间: 2024-07-30 06:52:53

应用程序开发之模仿史上最牛游戏(二)的相关文章

应用程序开发之模仿史上最牛游戏(三)

声明:转载请注明http://www.cnblogs.com/letougaozao/p/3720679.html 关卡解锁 关卡状态的设计 一.解锁动画(点一下解锁) 解锁前后 监听touch end方法,使用涂层layer动画 -加入QuartzCore.framework框架 -动画包括哪些内容呢?(注意播放声音的代码) 1??整个关卡摇摆两下(旋转动画).并且变大(缩放动画) 2??搁层消失(直接移除) 1.封装一个动画组的方法 - (CAAnimationGroup *)animati

应用程序开发之模仿史上最牛游戏(四)

一.需要一个新的控制器(ReadyViewController) -新建控制器,通过push方式到这个新控制器 -给控制器的view制定类(根据图片选择颜色) -给线起名字 1??给每一个Stage添加手势监听 //2.4为stageView添加手势监听 [stageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(itemClick:)]]; 2??需要控

应用程序开发之模仿史上最牛游戏(一)

很多天没有更新博客了,一方面是回杭州了几天,另一方面是开始做项目练习了.感谢关注我的一些朋友- 这些天会陆续把自己做这个项目的过程更新出来,喜欢的朋友可以一起学习一下 声明:转载请注明http://www.cnblogs.com/letougaozao/p/3708887.html 游戏配置 第一个界面-主界面 游戏设置界面 音乐.音效 一.游戏该有的配置 -Status Bar Hide 注意:IOS7如何隐藏状态栏:plist加个view controller-base.... 设置成NO就

微信小程序开发-地图map组件上使用input组件

微信小程序开发-地图map组件上使用input组件 标签: 微信小程序 uni-app 原生组件层级关系 微信小程序在最高层级 在微信小程序中原生组件包括camera canvas input(仅在focus时表现为原生组件) live-player live-pusher map textarea video 在微信小程序开发中原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上. 后插入的原生组件可以覆盖之前的原生组件. 原生组件还无法在 pic

史上最牛逼的菜刀

6月17号,某牛在朋友圈发了消息: 史上最牛逼的中国菜刀即将发布,过市面上所有的 waf,而且把 webshell 玩到让你瞠目结舌的境界 当时有消息称 6 月底将会发布新版菜刀. 果不其然,在 6 月 20 日,原本已经关闭的 maicaidao.com 又开放了,而且下载量瞬间就到了 660 +. 话不多说,赶紧去下载一个体验一波到底有多牛逼. 文章发布时站点又关闭了,具体原因不得而知.(脉搏SP小编注:应该是被DDoS了) 脉搏小编看了一下whois变更,认为应该还是老兵作品.相关阅读<红

企业级openvpn生产标准史上最牛最全最实战课程

企业级openvpn生产标准史上最牛最全最实战课程 近100节,让你轻松精通openvpn及技术 http://edu.51cto.com/pack/view/id-277.html 企业级OpenVPN技术中级运维实战视频课程(上) 1 课前思想必看 2 VPN概述介绍与图解 3 VPN的作用介绍与图解 4 VPN的企业应用分类介绍与图解1 5 VPN的企业应用分类介绍与图解2 6 常见隧道协议介绍-PPTP 7 常见隧道协议介绍-L2TP 8 常见隧道协议介绍-IPSEC-SSLVPN 9

史上最牛逼的javascript俄罗斯方块,63行代码搞定啊

<!doctype html><html><head></head><body> <div id="box" style="width:252px;font:25px/25px 宋体;background:#000;color:#9f9;border:#999 20px ridge;text-shadow:2px 3px 1px #0f0;"></div> <script>

Menu史上最牛的侧滑效果

GAG-master史上最牛的侧滑效果,其中加载图片展示的时候也是慢慢翻转效果,侧滑Menu更是牛逼.  其中自定义BlurFoldingActionBarToggle 提供了onDrawerOpened()和onDrawerClosed()方法,  然后在这两个方法里面设置打开和关闭等各项操作. 运行效果: 查看完整源码地址:http://www.itlanbao.com/code/20150909/10000/100518.html package me.storm.ninegag; imp

HDOJ 1406 完数(打表,附讨论区出现的史上最牛逼打表,0ms)

 完数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22197    Accepted Submission(s): 8115 Problem Description 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3:28=1+2+4+7+14. 本题的任务是判