九宫格计算思路

在同一行不断添加View
Y值不变,X值:(间距+宽度) * (下标 % 总列数)
0%3 * (hMargin + width) 1%3 * (hMargin + width) 2%3 * (hMargin + width)
3%3 * (hMargin + width) 4%3 * (hMargin + width) 5%3(hMargin + width)

6%3 * (hMargin + width) 7%3 * (hMargin + width)

在不同行不断添加View
Y值(间距 + 高度) * (下标/总列数),X值:(间距+宽度) * (下标 % 总列数)
0 1 2->y : / 3 * (vMargin + height) = 0
3 4 5->y : / 3 * (vMargin + height) = 1
6 7 8->y : / 3 * (vMargin + height) = 2

#import "ViewController.h"

@interface ViewController ()

// 购物车
@property (weak, nonatomic) IBOutlet UIView *shopCarView;
// 添加按钮
@property (weak, nonatomic) IBOutlet UIButton *addButton;
// 删除按钮
@property (weak, nonatomic) IBOutlet UIButton *removeButton;
// 全局的下标
//@property (nonatomic, assign) NSInteger index;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 给下标赋值
//    self.index = 0;

//    // 裁剪多余部分(不可取)
//    self.shopCarView.clipsToBounds = YES;
}

/**
 *  添加到购物车
 *
 *  @param button 按钮
 */
- (IBAction)add:(UIButton *)button {
/***********************1.定义一些常量*****************************/
    // 1.总列数
    NSInteger allCols = 3;
    // 2.商品的宽度 和 高度
    CGFloat width = 80;
    CGFloat height = 100;
    // 3.求出水平间距 和 垂直间距
    CGFloat hMargin = (self.shopCarView.frame.size.width - allCols * width) / (allCols -1);
    CGFloat vMargin = (self.shopCarView.frame.size.height - 2 * height) / 1;
    // 4. 设置索引
    NSInteger index = self.shopCarView.subviews.count;
    // 5.求出x值
    CGFloat x = (hMargin + width) * (index % allCols);
    CGFloat y = (vMargin + height) * (index / allCols);

/***********************2.创建一个商品*****************************/
  // 1.创建商品的view
    UIView *shopView = [[UIView alloc] init];
  // 2.设置frame
    shopView.frame = CGRectMake(x, y, width, height);
  // 3.设置背景颜色
    shopView.backgroundColor = [UIColor greenColor];
  // 4.添加到购物车
    [self.shopCarView addSubview:shopView];

/***********************3.设置按钮的状态*****************************/
//    if (index == 5) {
//        button.enabled = NO;
//    }
    button.enabled = (index != 5);

    // 5.设置删除按钮的状态
    self.removeButton.enabled = YES;

    // 让下标+1
//    self.index += 1;
}

/**
 *  从购物车中删除
 *
 *  @param button 按钮
 */
- (IBAction)remove:(UIButton *)button {
    // 1. 删除最后一个商品
    UIView *lastShopView = [self.shopCarView.subviews lastObject];
    [lastShopView removeFromSuperview];

    // 2.设置索引值 -1
//    self.index -= 1;

    // 3. 设置添加按钮的状态
    self.addButton.enabled = YES;

    // 4. 设置删除按钮的状态
    /*
    if (self.shopCarView.subviews.count == 0) {
        self.removeButton.enabled = NO;
    }
     */
    self.removeButton.enabled = (self.shopCarView.subviews.count != 0);

}
@end
时间: 2024-08-18 13:01:16

九宫格计算思路的相关文章

九宫格的计算思路

(以下图片在IE浏览器中可能无法显示) 在开始笔记之前先加点之前记下的小知识点: UIView的常见属性和方法: [email protected](nonatomic,radonly)UIView *superview: 获得自己的父控件对象 [email protected] (nonatomic,radonly,copy)NSArray *subviews: 获得自己的所有子控件的对象(数组元素的顺序决定着子控件的显示层级顺序-下标越大的越显示在上面) 3.-(void)addSubvie

IOS 九宫格实现思路

根据要求 显示图片 以九宫格形式排放 基本思路 //显示总列数 可以随意改变 int columnCount=3; //没个格子的宽度和高度 CGFloat appW=85.0; CGFloat appH=95.0; //计算间隙 CGFloat appMargin=(self.view.frame.size.width-columnCount*appW)/(columnCount+1); //读取资源文件 _apps.count表示资源个数 NSString *path=[[NSBundle

五子棋计算思路

五子棋分为有禁手和无禁手,有禁手就是在无禁手的规则的基础上加上禁手规则,具体是规则不讲了.所以就人机对战来讲,从无禁手来做,比较好做.这里只讲无禁手的情况.无禁手就是只要能连成5个子,或者5个子以上,就算赢.    而计算机博弈要解决的问题,抽象地讲只有一个问题“下一步怎么走”,对五子棋来讲,就是下一步在哪个点落子.一般的思路在 棋类人机对战的一般原理 - BillySir - 博客园  已经有说.下面重点讲五子棋特有的算法思路. 下一步怎么走,总体思路:    1.如果下一步能赢,就走这一步 

九宫格计算,创建应用例子,字典转模型

#import "ViewController.h" #import "CZapp.h" //引用模型类 @interface ViewController () @property (nonatomic ,strong) NSArray* apps; //声明数组保存数据 @end @implementation ViewController //懒加载 -(NSArray *)apps { if (_apps==nil) { // 获取plist路径 NSStr

九宫格的算法

## 九宫格计算思路- 利用控件的索引index计算出控件所在的行号和列号- 利用列号计算控件的x值- 利用行号计算控件的y值 ## HUD- 其他说法:指示器.遮盖.蒙板- 半透明HUD的做法 - 背景色设置为半透明颜色 ## 定时任务- 方法1:performSelector ```objc// 1.5s后自动调用self的hideHUD方法[self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5];```-

iOS之九宫格设计和数据模型转换

1. 九宫格计算思路(主要就是控件位置(x/y)的改变) 1.1利用控件的索引index(该父控件中子控件的个数)计算出控件所在的行号和列号 1.2利用列号计算控件的x值 = 行号 *(子控件的宽度 + 间距) 1.3利用行号计算控件的y值 = 列号 *(子控件的高度 + 间距) /* 清除超过该View范围的控件(控件还在,界面上看不见) self.View.clipsToBounds = YES; */ 2.HUD 2.1其他说法:指示器.遮盖.蒙板 2.2半透明HUD的做法 :背景色设置为

UI知识点二

九宫格计算思路 利用控件的索引index计算出控件所在的行号和列号 利用列号计算控件的x值 利用行号计算控件的y值 HUD 其他说法:指示器.遮盖.蒙板 半透明HUD的做法 背景色设置为半透明颜色 定时任务 方法1:performSelector // 1.5s后自动调用self的hideHUD方法 [self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5]; 方法2:GCD  dispatch_after(di

IOS开发UI基础之Plis文件-字典转模型

什么是plist文件? 在开发中直接将数据写在代码里面 不是一种合理的做法 如果数据经常改变 就需要经常翻开对应的代码进行修改 造成代码扩展性低 因此,可以考虑将经常变的数据放在?文件中进?行存储,程序启动后从?文件中 读取最新的数据.如果要变动数据,直接修改数据?文件即可,不?用修改代码 一般可以使?用属性列表?文件存储NSArray或者NSDictionary之类的数据,这 种“属性列表?文件”的扩展名是plist,因此也称为“plist?文件” 在Xcode创建plist文件的步骤: 解析

1-2基础控件

什么是UIImageView UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton.UILabel.UIImageView.UITableView等等 UIImageView极其常用,功能比较专一:显示图片 什么是UILabel UILabel极其常用,功能比较专一:显示文字 什么是按钮 还有一个非常重要的UI控件---UIButton,俗称“按钮”,一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,