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

  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/sayimba/p/5708355.html
Copyright © 2011-2022 走看看