zoukankan      html  css  js  c++  java
  • 简易拼图

    //
    //  RootViewController.m
    #import "RootViewController.h"
    
    @interface RootViewController ()
    
    @end
    
    @implementation RootViewController
    
    //创建背景视图
    -(void)createUIView
    {
        UIView * view = [[UIView alloc]initWithFrame:CGRectMake(9, 49, 302, 302)];
        view.backgroundColor = [UIColor cyanColor];
        view.tag = 100;
        [self.view addSubview:view];
    
    }
    //创建提示视图
    -(void)createUIImageView
    {
        UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 360, 100, 100)];
        imageView.image = [UIImage imageNamed:@"king2.png"];
        [self.view addSubview:imageView];
    
    }
    //进行拼图
    -(void)segmentImage
    {
        //<1>获取图片
        UIImage * image =[UIImage imageNamed:@"king2.png"];
        //<2>获取分割以后每一个小块的宽和高
        float height = image.size.height / 4;
        float width = image.size.width / 4;
        
        //<3>获取到背景视图
        UIView * backView = (UIView *)[self.view viewWithTag:100];
        
        //<4> 创建16个UIImageView显示分割以后的小图片
        for(int i = 0;i<4;i++)
        {
            for(int j = 0;j<4;j++)
            {
                UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(2 + width * j, 2 + height * i, width - 2, height -2)];
                //imageView.backgroundColor = [UIColor orangeColor];
                
                //<5>对图片进行分割 ---- 抠图
                //图片分割类CGImageRef
                //CGImageRef这个类会根据提供的视图的大小进行等比例分割
                //CGImageCreateWithImageInRect
                //第一个参数:被分割的图片的CGImage类型
                //第二个参数:将图片按照什么尺寸划分
                
                CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, imageView.frame);
                
                //image.CGImage 这个方法是将UIImage转化成CGImage
                
                //<6>将CGImage类型的图片转化成UIImage类型的图片
                UIImage * littleImage = [UIImage imageWithCGImage:imageRef];
                
                //imageWithCGImage:这个方法是将CGImage转化成UIImage
                
                //<7>将16个image添加到16个UIImageView视图上
                imageView.image = littleImage;
                
                //<8>隐藏一个小的子视图
                if(i * j == 9)
                {
                    imageView.tag = 998;
                    [imageView setHidden:YES];
                }
                
                //<9>为每一个小的子视图添加手势
                imageView.userInteractionEnabled = YES;
                //调用自定义方法
                [self addGestureRecgnizerOnImageView:imageView];
                
                [backView addSubview:imageView];
    
            }
        }
        
    }
    
    //为每一个视图添加手势的方法---自定义方法
    -(void)addGestureRecgnizerOnImageView:(UIImageView *)imageView
    {
        UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
        //设置点击次数
        tap.numberOfTapsRequired = 1;
        //设置手指根数
        tap.numberOfTouchesRequired = 1;
        //添加手势
        [imageView addGestureRecognizer:tap];
    
    }
    //实现点击方法
    -(void)tapAction:(UITapGestureRecognizer *)tap
    {
        //<1>获取点击的子视图
        UIImageView * tapImageView = (UIImageView *)tap.view;
        //<2>获取空的子视图
        UIImageView * blockImageView = (UIImageView *)[self.view viewWithTag:998];
        //<3>判断点击视图的横坐标和空视图的横坐标是否相差75
        BOOL isEqualX75 = fabs(tapImageView.frame.origin.x - blockImageView.frame.origin.x) == 75;
        BOOL isEquelY75 = fabs(tapImageView.frame.origin.y - blockImageView.frame.origin.y) == 75;
        BOOL isEquelX0 = fabs(tapImageView.frame.origin.x - blockImageView.frame.origin.x) == 0;
        BOOL isEquelY0 = fabs(tapImageView.frame.origin.y - blockImageView.frame.origin.y) == 0;
        
        if((isEqualX75 && isEquelY0 )|| (isEquelX0 && isEquelY75))
        {
            [UIView animateWithDuration:0.3 animations:^{
                
                //可以交换点击的视图和空视图
                CGRect tempView = tapImageView.frame;
                tapImageView.frame = blockImageView.frame;
                blockImageView.frame = tempView;
    
            
            } completion:nil];
        }
    
    }
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor purpleColor];
        [self createUIView];
        [self createUIImageView];
        [self segmentImage];
        
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        
    }
    
    @end

  • 相关阅读:
    poj 2942 Knights of the Round Table(无向图的双连通分量+二分图判定)
    Java序列化的几种方式
    Android 四大组件学习之Service六
    cursor:pointer的意思
    JSP中<base href="<%=basePath%>">的作用
    一篇让Java程序猿随时可以翻看的Oracle总结
    史上最全的javascript知识点总结,浅显易懂。
    史上最全的HTML、CSS知识点总结,浅显易懂。
    css学习归纳总结
    Web前端开发Chrome插件
  • 原文地址:https://www.cnblogs.com/sayimba/p/5708355.html
Copyright © 2011-2022 走看看