《iOS 自定义控件开发(上)》

《iOS 自定义控件开发(中)》

接上篇iOS自定义控件开发之后,我们尝试另外一种。

在Xcode的右边,会看到如下的图

其中,上面有一个:Custom Class。

那就是代表着我们可以直接使用这个Custom Class来自定义我们的类咯~

#0 第一次尝试

将Class字段填入我们所写的自定义控件名。

然后修改我们上次写的ChartViewController文件。删除之前的关联,重新关联这个View。

//
// ChartViewController.h
//
// Created by Luna Gao on 15/10/29.
// Copyright © 2015年 zhiqiankeji.com. All rights reserved.
// #import <UIKit/UIKit.h>
#import "LGChartView.h"
#import "Hardware.h" @interface ChartViewController : UIViewController @property (weak, nonatomic) IBOutlet LGChartView *chartView; @end

之后删除掉viewDidLoad中所有的实例化代码,就像我们使用UILabel等原生控件一样,不再去实例化对象。

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

之后再修改LGChartView,删除之前我们自定义的

- (instancetype)initWithParentView:(UIView*) view;

方法。声明以及实现均需要删除。

然后再次运行我们的代码,出现如下情况

后续尝试过很多种方法进行修改,但是均没有成功。第一次尝试失败。

#1 第二次尝试

经过分析,上图的原因在于初始化时没有设置背景色,即:

- (instancetype)initWithFrame:(CGRect)frame
{
frame = CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height);
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.autoresizesSubviews = YES;
self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
}
return self;
}

之前我们这段代码中的

self.backgroundColor = [UIColor clearColor];

这句代码,并没有执行。

尝试放在init方法中,不执行。

尝试放在initWithFrame方法中,不执行。

尝试放在initWithCoder方法中,成功!(擦擦擦!!!这方法我是无聊的时候随便试了一下,结果成功了···坑爹啊,从来没用过这个方法···没想到啊···)

这之后就简单多了~

将之前的这些设置自适应大小的代码均可删掉。

        self.autoresizesSubviews = YES;
self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

删除无用的代码,简化一下,期间不小心删掉了自定义控件中的

-(void)layoutSubviews {
[self setNeedsDisplay];
}

出现如下的问题:

可以很明显的看出,当界面旋转后,出现了变形的情况。所以,请保留此方法。

#2 终极方案

综合上述:

自定义控件,继承自UIView,在Storyboard中修改Custom Class绑定到我们的自定义控件中。

自定义控件需要实现initWithCoder方法,Storyboard会自动调用此方法进行初始化。

然后修改drawRect方法开始绘制自定义控件内容。

最后,不要忘记在layoutSubviews方法中调用setNeedsDisplay进行刷新。

至此,自定义控件在实例化的阶段就完成了。我们在调用的时候,可以以非常简单方便的方式来使用。

iOS 自定义控件开发(中)的更多相关文章

  1. iOS 自定义控件开发(上)

    工作需要,最近在进行iOS方面的图表工作.找了很多第三方库都无法实现效果,所以决定自己写一个控件. <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> #0 目 ...

  2. 简单讲解iOS应用开发中的MD5加密的相关使用<转>

    这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用,示例代码基于传统的Objective-C,需要的朋友可以参考下 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POS ...

  3. 简单讲解iOS应用开发中的MD5加密的相关使用

      简单讲解iOS应用开发中的MD5加密的相关使用   作者:文顶顶 字体:[增加 减小] 类型:转载 时间:2015-12-19 我要评论 这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用, ...

  4. iOS项目开发中的知识点与问题收集整理①(Part 一)

    前言部分 注:本文并非绝对原创 大部分内容摘自 http://blog.csdn.net/hengshujiyi/article/details/20943045 文中有些方法可能已过时并不适用于现在 ...

  5. iOS项目开发中的知识点与问题收集整理①

    前言部分 注:本文并非绝对原创 大部分内容摘自 http://blog.csdn.net/hengshujiyi/article/details/20943045 文中有些方法可能已过时并不适用于现在 ...

  6. IOS程序开发中-跳转到 发送短信界面 实现发短信

    前言:我发现我标题取的不好,谁帮我取个承接上下文的标题?评论一下,我改 项目需求:在程序开发中,我们需要在某个程序里面发送一些短信验证(不是接收短信验证,关于短信验证,传送门:http://www.c ...

  7. iOS项目开发中的知识点与问题收集整理②(Part 二)

    1.点击UIButton 无法产生触摸事件    如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...

  8. Xamarin.IOS/Mac开发中遇到的问题

    虚拟机中安装的mac系统无法识别iphone 今天在 Xamarin.iOS 应用的免费预配 时,进行到 5.插入要在其中部署应用的 iOS 设备. 在第8选择iphone设备时,发现iphone并没 ...

  9. iOS项目开发中的知识点与问题收集整理②

    1.点击UIButton 无法产生触摸事件    如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...

随机推荐

  1. docker-2 深入了解docker

    docker镜像.容器.仓库的基本概念 镜像 Docker 镜像就是一个只读的模板.例如:一个镜像可以包含一个完整的 CentOS 操作系统环境,里面仅安装了 httpd或用户需要的其它应用程序. 镜 ...

  2. CSRF 攻击原理和防御方法

    1. CSRF攻击原理 CSRF(Cross site request forgery),即跨站请求伪造.我们知道XSS是跨站脚本攻击,就是在用户的浏览器中执行攻击者的脚本,来获得其cookie等信息 ...

  3. 将Session写入Memcache

    通过session_set_save_handler()方法自定义Session写入Memcache <?php class MemSession{ private static $handle ...

  4. 详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

    主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxe ...

  5. apt-cache, apt-get

    apt是debian系的软件包的管理工具,他们可以通过搜索在/var/lib/apt/list里的索引文件搜做根据/etc/apt/sources.list里的软件源来在线安装软件,安装的过程还可以自 ...

  6. javascript将DOM事件处理程序封装为event.js 出现的低级错误记录

    将 DOM 0级事件处理程序和DOM2级事件处理程序 IE事件处理程序封装为eventUtil对象,达到跨浏览器的效果.代码如下: var eventUtil = { // 添加事件句柄 addEve ...

  7. python 解析json loads dumps

    认识 引用模块 重要函数 案例 排序 缩进参数 压缩 参考 认识 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standa ...

  8. hdu 4848 Wow! Such Conquering! (floyd dfs)

    Wow! Such Conquering! Problem Description There are n Doge Planets in the Doge Space. The conqueror ...

  9. FOJ 1683 纪念SlingShot(矩阵快速幂)

    C - 纪念SlingShot Description 已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5, ...

  10. html5实现微信摇一摇功能

    在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...