`
iaiai
  • 浏览: 2216224 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iOS 九宫格坐标计算

 
阅读更多
一、分析

寻找左边的规律,每一个uiview的x坐标和y坐标。

二、实现思路

(1)明确每一块用得是什么view
(2)明确每个view之间的父子关系,每个视图都只有一个父视图,拥有很多的子视图。
(3)可以先尝试逐个的添加格子,最后考虑使用for循环,完成所有uiview的创建
(4)加载app数据,根据数据长度创建对应个数的格子
(5)添加格子内部的子控件
(6)给内部的子控件装配数据

三、代码示例
//
//  YYViewController.m
//  九宫格练习
//
//  Created by 孔医己 on 14-5-22.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()
@property(nonatomic,strong)NSArray *apps;
@end

@implementation YYViewController


//1.加载数据
- (NSArray *)apps
{
    if (!_apps) {
        NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
        _apps=[NSArray arrayWithContentsOfFile:path];
    }
    return _apps;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%d",self.apps.count);
    
    //2.完成布局设计
    
    //三列
    int totalloc=3;
    CGFloat appvieww=80;
    CGFloat appviewh=90;
    
    CGFloat margin=(self.view.frame.size.width-totalloc*appvieww)/(totalloc+1);
    int count=self.apps.count;
    for (int i=0; i<count; i++) {
        int row=i/totalloc;//行号
        //1/3=0,2/3=0,3/3=1;
        int loc=i%totalloc;//列号
        
        CGFloat appviewx=margin+(margin+appvieww)*loc;
        CGFloat appviewy=margin+(margin+appviewh)*row;
        
        
        //创建uiview控件
        UIView *appview=[[UIView alloc]initWithFrame:CGRectMake(appviewx, appviewy, appvieww, appviewh)];
        //[appview setBackgroundColor:[UIColor purpleColor]];
        [self.view addSubview:appview];
        
        
        //创建uiview控件中的子视图
        UIImageView *appimageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 80, 50)];
        UIImage *appimage=[UIImage imageNamed:self.apps[i][@"icon"]];
        appimageview.image=appimage;
        [appimageview setContentMode:UIViewContentModeScaleAspectFit];
       // NSLog(@"%@",self.apps[i][@"icon"]);
        [appview addSubview:appimageview];
        
        //创建文本标签
        UILabel *applable=[[UILabel alloc]initWithFrame:CGRectMake(0, 50, 80, 20)];
        [applable setText:self.apps[i][@"name"]];
        [applable setTextAlignment:NSTextAlignmentCenter];
        [applable setFont:[UIFont systemFontOfSize:12.0]];
        [appview addSubview:applable];
        
        //创建按钮
        UIButton *appbtn=[UIButton buttonWithType:UIButtonTypeCustom];
        appbtn.frame= CGRectMake(10, 70, 60, 20);
        [appbtn setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];
        [appbtn setBackgroundImage:[UIImage imageNamed:@"buttongreen_highlighted"] forState:UIControlStateHighlighted];
        [appbtn setTitle:@"下载" forState:UIControlStateNormal];
        appbtn.titleLabel.font=[UIFont systemFontOfSize:12.0];
        [appview addSubview:appbtn];
        
        [appbtn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
    }

}

-(void)click
{
    //动画标签
    UILabel *animalab=[[UILabel alloc]initWithFrame:CGRectMake(self.view.center.x-100, self.view.center.y+20, 200, 40)];
    [animalab setText:@"下载成功"];
    animalab.font=[UIFont systemFontOfSize:12.0];
    [animalab setBackgroundColor:[UIColor brownColor]];
    [animalab setAlpha:0];
    [self.view addSubview:animalab];
    
//    [UIView beginAnimations:Nil context:Nil];
//    [animalab setAlpha:1];
//    [UIView setAnimationDuration:4.0];
//    [UIView commitAnimations];
    
    //执行完之后,还得把这给删除了,推荐使用block动画
    
    [UIView animateWithDuration:4.0 animations:^{
    [animalab setAlpha:1];
    } completion:^(BOOL finished) {
        //[self.view re];
    }];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

@end


执行效果:
  • 大小: 13.9 KB
  • 大小: 272.2 KB
分享到:
评论

相关推荐

    详解iOS应用UI开发中的九宫格坐标计算与字典转换模型

    九宫格坐标计算 一、要求 完成下面的布局 二、分析 寻找左边的规律,每一个uiview的x坐标和y坐标。 三、实现思路 (1)明确每一块用得是什么view (2)明确每个view之间的父子关系,每个视图都只有一个父视图,拥有...

    iOS 九宫格连线手势解锁

    在iOS平台上实现“九宫格连线手势解锁”是一种为设备添加额外安全层的方式,它模仿了Android系统中的经典解锁机制。这种解锁方式不仅提供了一种直观的用户交互体验,还能帮助用户快速识别并访问他们的设备。以下是...

    IOS自定义UIButton九宫格效果

    本文主要探讨了如何在iOS平台上创建一个自定义的UIButton九宫格效果,这在很多应用场景中都非常常见,如导航菜单、游戏面板等。下面将详细解释实现这个功能的关键步骤和涉及的技术点。 首先,我们要了解九宫格的...

    九宫格手势密码案例

    - 用户在九宫格上绘制的路径需要被记录下来,通常以坐标序列的形式保存。 - 存储这些路径信息时,可以考虑使用SQLite数据库或者SharedPreferences(Android)或UserDefaults(iOS)。 4. **密码匹配算法**: - ...

    unity打开安卓和ios的相机和相册,将拿到的照片变成九宫格形式并保存 源码

    这个项目提供了一套完整的解决方案,基于Unity2018.1.0版本,允许用户在游戏或应用内打开相机拍摄照片或从相册选择图片,并将选中的照片转换为九宫格样式进行保存。 首先,我们要了解如何在Unity中调用原生平台的...

    深入解析iOS应用开发中九宫格视图布局的相关计算方法

    在iOS应用开发中,创建九宫格视图布局是一项常见的任务,它通常用于展示一系列小图标或内容,如产品列表、菜单选项等。本篇将深入解析如何进行相关的计算方法,确保视图在不同屏幕尺寸下正确显示。 首先,我们需要...

    绘画九宫格跳转

    在iOS开发中,"绘画九宫格跳转"是一个典型的交互设计与图形处理的应用场景。这一功能涉及到的主要知识点包括: 1. **Core Graphics (CG) 和 UIKit**:iOS中的绘图功能主要通过Core Graphics框架来实现,它允许...

    九宫格锁屏

    设计九宫格锁屏涉及到多个技术层面,包括图形用户界面(GUI)设计、触摸事件处理、路径匹配算法以及安全性策略。以下是关于这个主题的一些详细知识点: 1. **图形用户界面**:九宫格由9个小方块组成,每个方块代表...

    IOS手势密码锁

    手势密码通常由用户在九宫格图案上绘制一条连续的路径来设定,这条路径连接了至少四个点,每个点代表一个数字。系统会记录这个路径的顺序和位置,用于后续的解锁验证。 **二、GestureLockView实现** 1. **自定义...

    IOS手势解锁

    2. **绘制九宫格**:在视图上绘制9个可触摸的点,可以使用`CAShapeLayer`来实现。 3. **监听触摸事件**:在视图中添加`UIGestureRecognizer`监听用户的触摸操作。 4. **记录路径**:在`touchesBegan`, `...

    iOS 手势解锁独立控件,可扩展性很强.zip

    这个界面可能会由多个子视图组成,如圆点(代表九宫格的点)和连线(表示用户绘制的路径)。这些视图可以使用Auto Layout进行布局,以适应不同屏幕尺寸的设备。 2. **手势识别**:项目中的`GestureRecognizer`类...

    仿微信自定义圆形群聊组合头像

    微信等社交应用中,通常采用九宫格的方式展示群聊成员,通过将9个或更少的头像排列在一个正方形区域内,使得每个头像都能被清晰地看到。这种设计既节省空间,又能直观地反映群聊的参与人数。 实现群聊组合头像的...

    Gesture-unlock:模仿支付宝手势解锁的一个Demo

    首先,手势解锁的基本原理是用户在预设的九宫格区域内绘制特定的路径,系统记录并保存这个路径作为解锁密码。在后续的解锁过程中,用户需再次绘制相同的路径以完成解锁。这涉及到图形匹配、坐标计算和用户交互等多个...

    自定义控件-动态数字Label+动态百分比背景.rar

    - 设计一个可调整填充的背景图案,比如一个矩形或环形,可以使用SVG、九宫格图片或者纯色渐变。 - 在控件内部计算当前数值对应的百分比,然后根据这个百分比调整背景的填充状态。 - 如果是圆形进度条,可能需要...

    使用swipe方法模拟屏幕滑动与手势密码绘制

    为了自动化测试这种功能,我们需要模拟在特定路径上连续点击九宫格的点,形成预设的手势。同样,这可以通过`TouchAction`类来实现,通过连续的`press`和`move_to`动作,连接起手势路径上的所有点,最后执行`release`...

Global site tag (gtag.js) - Google Analytics