前两天看了别人的文章,涉及到了镂空的展示,所以我在这里把实现的内容写成Swift语言的小Demo,供大家欣赏

首先,需要创建导航视图,然后创建两种展示方式的按钮

let vc = ViewController();
        let nav = UINavigationController.init(rootViewController: vc);
        window?.rootViewController = nav;

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        self.title = "两种镂空Demo";
        self.view.backgroundColor = UIColor.whiteColor();
        
        //创建两个按钮
        let btn1 = UIButton.init(frame: CGRectMake(20, 100,screenWidth()-40, 50));
        btn1.setTitle("滑块部分显示与背景不一样的图", forState: .Normal);
        btn1.setTitleColor(UIColor.blueColor(), forState: .Normal);
        btn1.addTarget(self, action:#selector(btn1Click), forControlEvents: .TouchUpInside);
        self.view.addSubview(btn1);
        
        let btn2 = UIButton.init(frame: CGRectMake(20, 180,screenWidth()-40, 50));
        btn2.setTitle("滑块部分显示与背景不一样的图", forState: .Normal);
        btn2.setTitleColor(UIColor.blueColor(), forState: .Normal);
        btn2.addTarget(self, action:#selector(btn2Click), forControlEvents: .TouchUpInside);
        self.view.addSubview(btn2);
        
    }
    //按钮1方法
    func btn1Click(btn:UIButton) {
        let showVC = ShowViewController();
        showVC.typeInt = 1;
        self.navigationController?.pushViewController(showVC, animated: true);
    }
    //按钮2方法
    func btn2Click(btn:UIButton) {
        let showVC = ShowViewController();
        showVC.typeInt = 2;
        self.navigationController?.pushViewController(showVC, animated: true);
    }
    
    //相当于#define
    //返回屏幕宽
    func screenWidth() -> CGFloat {
        return UIScreen.mainScreen().bounds.size.width;
    }
    //返回屏幕高
    func screenHeight() -> CGFloat {
        return UIScreen.mainScreen().bounds.size.height;
    }

我分成了两种展示方式

一种是:滑块部分显示与背景不一样的图

//背景图片
            let backImage = UIImageView.init(frame: CGRectMake(0, 64, screenWidth(), screenHeight()-64));
            backImage.image = UIImage.init(named: "background.jpg");
            self.view.addSubview(backImage);
            
            //背景视图
            bgView = UIView.init(frame: self.view.bounds);
            bgView.backgroundColor = UIColor.clearColor();
            self.view.addSubview(bgView);
            
            //移动视图
            clipView = UIView.init(frame: CGRectMake(0, 64, 180, 180));
            clipView.layer.cornerRadius = 90;
            clipView.layer.masksToBounds = true;
            //设置裁剪
            clipView.clipsToBounds = true;
            //设置交互
            clipView.userInteractionEnabled = true;
            bgView.addSubview(clipView);
            
            //显示图片
            showImgView = UIImageView.init(frame: CGRectMake(0, 0, screenWidth(), screenHeight()-64));
            showImgView.image = UIImage.init(named: "star.jpeg");
            clipView.addSubview(showImgView);
            
            //添加拖动手势
            let panGresture = UIPanGestureRecognizer.init(target: self, action: #selector(panGrestureView));
            clipView.addGestureRecognizer(panGresture);

另一种是:滑块部分显示与背景不一样的图,背景是空白

bgView = UIView.init(frame: self.view.bounds);
            bgView.backgroundColor = UIColor.lightGrayColor();
            self.view.addSubview(bgView);
            
            //移动视图
            clipView = UIView.init(frame: CGRectMake(0, 64, screenWidth()-40, 120));
            //设置裁剪
            clipView.clipsToBounds = true;
            //设置交互
            clipView.userInteractionEnabled = true;
            bgView.addSubview(clipView);
            
            //显示图片
            showImgView = UIImageView.init(frame: CGRectMake(0, 0, screenWidth(), screenHeight()-64));
            showImgView.image = UIImage.init(named: "star.jpeg");
            clipView.addSubview(showImgView);
            
            //添加拖动手势
            let panGresture = UIPanGestureRecognizer.init(target: self, action: #selector(panGrestureView));
            clipView.addGestureRecognizer(panGresture);

展示结果:

         

源码下载:http://download.csdn.net/detail/hbblzjy/9622850

Swift基础之实现一个镂空图片的小Demo的更多相关文章

  1. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

  2. Swift基础之两指拉动图片变大变小

    我们在使用APP的时候,有时会发现有些图片可以通过两指进行放大.缩小,今天就实现这样的一种效果,比较简单,不喜勿喷.... var imageVi:UIImageView! = nil    var ...

  3. 一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

    在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除 ...

  4. 一个上传图片,预览图片的小demo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. iOS:自己写的一个星级评价的小Demo

    重新整理了下自己星级评价的Demo,可以展示星级评价,可以动态修改星级. github的地址:https://github.com/hunterCold/HYBStarEvaluationView a ...

  6. 一个基于node 的小demo

    首先我们新建一个文件夹  demo-test-node-1 目录目录如下 -- blog_recents.js --template.html --titles.jspn 首先我们新建一个 templ ...

  7. 一个JNI的helloworld小demo

    最近想学习一下jni,在网上看了一些demo,自己也操作了一遍,首先我将我自己学习的demo网站贴出来:https://blog.csdn.net/lwcloud/article/details/78 ...

  8. gulp安装+一个超简单入门小demo

    gulp安装參考.gulp安装參考2. 一.NPM npm是node.js的包管理工具.主要功能是管理.更新.搜索.公布node的包. Gulp是通过npm安装的. 所以首先,须要安装node.js. ...

  9. SpringMVC-拦截器做一个登录认证的小Demo

    拦截器 拦截器的定义 处理器拦截器类似于servlet开发中的filter,用于对处理器进行预处理和后处理. 定义拦截器,实现HandlerInterceptor这个接口 接口的实现需要导入包impo ...

随机推荐

  1. JSP 基本语法

    1 JSP 的由来 servlet产生后,存在很大的问题,为了表现页面的效果,需要输出大量的HTML 语句,表现为一个个字符串,不仅利于开发,也不利于后期的维护,由此产生了JSP.主要用于将Servl ...

  2. PHP 扩展开发检测清单(扩展开发必读)

    想要做出一个成功的 PHP 扩展包,不仅仅是简单的将代码放进文件夹中就可以了,除此之外,还有非常多的因素来决定你的扩展是否优秀.以下清单的内容将有助于完善你的扩展,并且在 PHP 社区中得到更多的重视 ...

  3. 垃圾回收机制(GC)

    垃圾收集器(GC)与内存分配策略 GC需要完成的三件事: 判断哪些内存需要回收 什么时候回收 如何回收 在java内存运行时区域的各个部分中,程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程 ...

  4. Windows Server 2008 R2服务器系统安全设置参考指南

    Server 2008 R2服务器系统安全设置参考指南  重点比较重要的几部 1.更改默认administrator用户名,复杂密码 2.开启防火墙 3.安装杀毒软件 1)新做系统一定要先打上补丁(升 ...

  5. Oracle10g以上sysaux表空间的维护和清理

    SYSAUX表空间在Oracle 10g中引入,其作为SYSTEM表空间的辅助表空间.之前,一些使用独立表空间或系统表空间的数据库组件,现在SYSAUX表空间中存在.通过分离这些组件,减轻了SYSTE ...

  6. STM32 基DMA的DAC波形发生器

    DAC是STM32系列的一个基本外设,可以将数字信号转化成模拟信号,这次我将使用DAC来输出一个特定波形. 首先确定工作方法,由于我目前在做的简易示波器在输出波形的同时还需要显示输入信号,所以不能占用 ...

  7. 数组查找算法的C语言 实现-----线性查找和二分查找

    线性查找  Linear Search 用户输入学生学号的成绩 二分查找  Binary Search 要求数据表是已经排好序的 程序存在小的瑕疵

  8. 读书笔记-《Maven实战》-2018/4/17

    第五章 坐标和依赖 1.如同笛卡尔坐标系一样,Maven也通过坐标三元素定位一个资源. <groupId>com.dengchengchao.test</groupId> &l ...

  9. Python小代码_3_购物车

    product_list = [ ('MacBook', 9000), ('kindle', 500), ('tesla', 900000), ('book', 100), ('bike', 2000 ...

  10. matlab sparse函数和full函数用法详解(转)

    sparse函数 功能:Create sparse matrix-创建稀疏矩阵 用法1:S=sparse(X)--将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩 ...