关于MVC分层设计:
MVC分层将逻辑和界面控件分开, 控件对应相关的函数来响应操作.
在ios开发中, 最简单最快的就是利用视图控制(.xib)来完成界面,控件等非逻辑处理。
让然,也可以手动分层,全用代码控制。 由于我第一次接触MVC模式开发,开始不太习惯,所以在项目中还是用的老方法,要什么就写什么。
六角跳棋中,底层为棋盘:
chessBoardImg = [UIImageimageNamed:@"紫高亮.jpg"]; // UIImage 设置图片,将贴在底层容器中哦给你无
chessBoardViewImg = [[UIImageViewalloc]initWithImage:chessBoardImg]; //UIImageView 一个视图, 并贴上图片。
[chessBoardViewImgsetFrame:CGRectMake(0, 0, 320, 480)]; //给视图设置显示窗口
[selfinsertSubview:chessBoardViewImgatIndex: 0]; //将图片置于底层
棋盘图片放置在底层。 棋子为button,贴在棋盘上面, 每个棋子都有对应的相应函数:
[redChessBt addTarget:selfaction:@selector(redChessSelect:)forControlEvents:UIControlEventTouchUpInside];
// 放置浮动菜单
CGRect menuRect;
menuRect = CGRectMake(0, 435, 320, 80);
menuView = [[UIView alloc]initWithFrame:menuRect]; // 增加一个UIView 视图
menuViewImg = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"菜单.png"]];
[menuViewImg setFrame:CGRectMake(0, 0, 320, 80)];
[menuView addSubview:menuViewImg]; // 图片填充视图
//初始化重新开始, 返回, 帮助, 菜单四个按钮。
clearBoard = [[UIButton alloc]initWithFrame:CGRectMake(115, 45, 90, 35)];
[clearBoard setImage:restartImg forState:UIControlStateNormal]; //原始图片效果
[clearBoard setImage:restartImg1 forState:UIControlStateHighlighted]; //点击后图片的效果。
[clearBoard addTarget:self action:@selector(restartGame:) forControlEvents:UIControlEventTouchUpInside];
[menuView addSubview:clearBoard]; // clearBoard按钮属于menuView 视图
backHome = [[UIButton alloc]initWithFrame:CGRectMake(12, 45, 60, 35)];
[backHome setImage:backImg forState:UIControlStateNormal];
[backHome setImage:backImg1 forState:UIControlStateHighlighted];
[backHome addTarget:self action:@selector(backHome:) forControlEvents:UIControlEventTouchUpInside];
[menuView addSubview:backHome];
helpBt = [[UIButton alloc]initWithFrame:CGRectMake(250, 45, 60, 35)];
[helpBt setImage:helpImg forState:UIControlStateNormal];
[helpBt setImage:helpImg1 forState:UIControlStateHighlighted];
[helpBt addTarget:self action:@selector(helpView:) forControlEvents:UIControlEventTouchUpInside];
[menuView addSubview:helpBt];
Menu = [[UIButton alloc]initWithFrame:CGRectMake(12, 20, 60, 30)];
[Menu addTarget:self action:@selector(showMenu:) forControlEvents:UIControlEventTouchUpInside];
[menuView addSubview:Menu];
[self addSubview:menuView];
[self bringSubviewToFront:menuView];
//从allChess字典中找到关键位置为ap的坐标,并加入allChessTemp临时存放的字典(语法)
CGPoint app = CGPointFromString([allChess objectForKey:[NSNumber numberWithInt:ap]]);
[allChessTemp setObject:NSStringFromCGPoint(app) forKey:[NSNumber numberWithInt:ap]];
// 落子点选择 点击棋盘放大的操作
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
if (ifTwoTimeChessBoard == NO){
CGPoint endTouch;
UITouch *touch = [touches anyObject];
endTouch = [touch locationInView:self]; // 只需获取最后的touch坐
chessX = endTouch.x; // 在小棋盘上的x坐标
chessY = endTouch.y; // 在小棋盘上的y坐标
[self zoomIn]; //棋盘放大
}else{
[self zoomOut]; //棋盘缩小
}
}
// 棋盘放大
- (void)zoomIn {
int x = (int)(chessX - (Renju_margin1 - Renju_paneSize1/2))/Renju_paneSize1;
int y = (int)(chessY - (Renju_margin1 - Renju_paneSize1/2))/Renju_paneSize1;
float originX; // 棋盘放大后超出边界的x长度
float originY; // 棋盘放大后超出边界的y长度
int bx = Renju_margin1_b + x*Renju_paneSize1_b;
int by = Renju_margin1_b + y*Renju_paneSize1_b;
// ******** 控制点击边界位置时候, 放大棋盘显示棋盘不应该越界 *************
originX = (float)bx - chessX;
originY = (float)by - chessY;
if (originX <= 0) {
originX = 0;
}
if (originY <= 0) {
originY = 0;
}
if (originX >= 320) {
originX = 320;
}
if (originY >= yDown) {
originY = yDown;
}
if (chessX >=0 && chessX <= xLeft) {
originX = 0;
}
if (chessX >= xRight && chessX <= 320) {
originX = 320;
}
if (chessY >= 100 && chessY <= yUp) {
originY = 100;
}
if (chessY >= 340 && chessY <= yDown) {
originY = yDown;
}
if (chessX > xLeft && chessX < xRight) {
originX = 2*chessX - 160;
}
if (chessY > yUp && chessY < yDown) {
originY = 2*chessY - 360;
}
chessX_out = originX;
chessY_out = originY;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.1];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
self.transform = CGAffineTransformMakeScale(2, 2); //Scale 放大2倍
self.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[UIView commitAnimations];
ifTwoTimeChessBoard = YES;
[delegate scrollviewZoomIn:chessX_out andY:chessY_out];
}else{
return;
}
}
// 恢复成小棋盘
- (void)zoomOut {
[delegate scrollviewZoomOut];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
self.frame = CGRectMake(-160, -160, self.frame.size.width, self.frame.size.height);
self.transform = CGAffineTransformMakeScale(1, 1);
[UIView commitAnimations];
self.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
ifTwoTimeChessBoard = NO;
choosePosition = NO;
}