`
stephen830
  • 浏览: 3010145 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOS-自定义的画圆或弧的UIView

 
阅读更多

 

iOS-自定义的画圆或弧的UIView

 

CustomViewOfCircle.h

#import <UIKit/UIKit.h>

@interface CustomViewOfCircle : UIView

{
    //是否自定义属性:myDot
    BOOL isDefinedMyDot;
    
    //是否自定义属性:myRadius
    BOOL isDefinedMyRadius;
    
    //是否自定义属性:myAngle
    BOOL isDefinedMyAngle;
    
    //是否自定义属性:MyLineWidth
    BOOL isDefinedMyLineWidth;
    
    //是否自定义属性:MyClockWise
    BOOL isDefinedMyClockWise;
}

//圆圈或弧线的边线的颜色,默认为黑色
@property (nonatomic,strong) UIColor* myStrokeColor;

//线的宽度,默认为1.0
@property (nonatomic,assign) CGFloat myLineWidth;

//圆圈或弧线的圆周中心点坐标,默认为当前视图的中心点,即(self.frame.size.width/2,self.frame.size.height/2)
@property (nonatomic,assign) CGPoint myDot;

//圆圈或弧线的半径,默认采用当前视图尺寸(self.frame.size)来计算半径
//计算规则:
//如果 self.frame.size.width > self.frame.size.height ,
//那么 半径=self.frame.size.height/2
//否则 半径=self.frame.size.width/2
//也就是取高、宽中值小的那个的1/2作为半径
@property (nonatomic,assign) CGFloat myRadius;

//圆圈或弧线的范围,用弧度来计算,圆一周总弧度为2*PI(即360度角)。默认值为(0,2*PI)
//angle.x :弧线起点的弧度
//angle.y :弧线终点的弧度
//
//
//               ^ 1.5*PI弧度
//               |
//               |
//               |
//               |
//               |
// 1*PI弧度      |
// -------------------------------->0弧度(2*PI弧度)
//               |
//               |
//               |
//               |
//               |
//               |0.5*PI弧度
//
//
//
//
@property (nonatomic,assign) CGPoint myAngle;

//画弧线方向,为0表示顺势正,为1表示逆时针,默认值为0.
//方向不同,画出的弧线也会不同,例如:
//假设 参数myAngle定义为(0 , 0.5*PI)
//如果 参数myClockWise=0,即将从上图中0弧度开始,沿顺时针方向画弧线到0.5*PI弧度位置,即画了一条90度角的弧线
//如果 参数myClockWise=1,即将从上图中0弧度开始,沿逆时针方向经过1.5*PI弧度、1*PI弧度,然后一直画弧线到0.5*PI弧度位置,相当于画了一条270度角的弧线
@property (nonatomic,assign) int myClockWise;



@end

 

 

CustomViewOfCircle.m

#import "CustomViewOfCircle.h"
#define PI M_PI //圆周率常量
#define default_start_angle 0.0 //默认起始弧度
#define default_end_angle 2*PI //默认终点弧度
#define default_line_width 1.0 //默认线宽


@implementation CustomViewOfCircle

#pragma mark --------------->系统方法区<---------------
-(instancetype)init{
    self=[super init];
    if(self){
        
    }
    return self;
}

-(void)drawRect:(CGRect)rect{
    //圆心坐标点
    if (!isDefinedMyDot) {
        _myDot.x =self.frame.size.width/2;
        _myDot.y =self.frame.size.height/2;
    }
    
    //圆半径
    if (!isDefinedMyRadius) {
        _myRadius=(self.frame.size.width>self.frame.size.height)?self.frame.size.height/2:self.frame.size.width/2;
    }
    
    //弧度
    if (!isDefinedMyAngle) {
        _myAngle.x=default_start_angle;
        _myAngle.y=default_end_angle;
        
    }
    
    //线宽
    if (!isDefinedMyLineWidth) {
        _myLineWidth=default_line_width;
    }
    
    //方向
    if (!isDefinedMyClockWise) {
        _myClockWise=0;
    }
    
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    //画弧线
    CGContextSetStrokeColorWithColor(context, _myStrokeColor.CGColor);
    CGContextSetLineWidth(context, _myLineWidth);//线的宽度
    CGContextAddArc(context, _myDot.x, _myDot.y, _myRadius, _myAngle.x, _myAngle.y, _myClockWise);
    CGContextDrawPath(context, kCGPathStroke); //绘制路径
}

#pragma mark --------------->自定义属性方法区<---------------

-(void)setMyCircleDot : (CGPoint) myCircleDot{
    _myDot.x=myCircleDot.x;
    _myDot.y=myCircleDot.y;
    isDefinedMyDot=YES;
}

-(void)setMyRadius:(CGFloat)myRadius{
    _myRadius=myRadius;
    isDefinedMyRadius=YES;
}

-(void)setMyAngle:(CGPoint)myAngle{
    _myAngle.x=myAngle.x;
    _myAngle.y=myAngle.y;
    isDefinedMyAngle=YES;
}

-(void)setMyLineWidth:(CGFloat)myLineWidth{
    _myLineWidth=myLineWidth;
    isDefinedMyLineWidth=YES;
}

-(void)setMyClockWise:(int)myClockWise{
    _myClockWise=myClockWise;
    isDefinedMyClockWise=YES;
}

@end

 

 

具体调用方法:

#import "ViewController894.h"
#import "CustomViewOfCircle.h"

@interface ViewController894 ()

@end

@implementation ViewController894

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

- (void)_drawCircle {
    
    //define CustomViewOfCircle
    CustomViewOfCircle* cvCircle = [[CustomViewOfCircle alloc] init];
    cvCircle.frame=CGRectMake(50, 100, 200, 200);
    cvCircle.backgroundColor=[UIColor whiteColor];
    
    //设置弧线颜色
    [cvCircle setNewStrokeColor:[UIColor redColor]];
    //设置半径
    [cvCircle setNewRadius:cvCircle.frame.size.width/2-10];
    //设置线宽
    [cvCircle setNewLineWidth:2.0];
    //设置弧线起点、终点弧度
    [cvCircle setNewAngle:CGPointMake(0.0*M_PI,1.5*M_PI)];
    //设置画弧线方向
    [cvCircle setNewClockWise:1];
    
    
    //add subview
    [self.view addSubview:cvCircle];
}

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

@end

 

 起始弧度 0,终点弧度 0.5*PI ,逆时针方向

 

 



  起始弧度 0,终点弧度 0.5*PI ,顺时针方向

 

 

 

 

 

 

  • 大小: 17.1 KB
  • 大小: 18.9 KB
分享到:
评论

相关推荐

    iOS-自定义画圆、扇形、圆弧

    在iOS应用中,我们通常通过`UIView`的`draw(_:)`方法或者`CALayer`的`draw(in:)`方法来进行自定义绘制。 1. **自定义绘制圆** 要绘制一个圆形,我们可以利用`CGContext`对象,它是Core Graphics的核心,用于管理...

    ios-自定义UIPageControl,实现同时显示不同大小的圆点.zip

    - 动画效果:当页面切换时,圆点大小变化可以平滑过渡,通过`UIView.animate(withDuration:)`(Swift)或`+[UIView animateWithDuration:]`(Objective-C)实现动画效果。 - 响应用户交互:确保`...

    ios-自定义PageControl.zip

    1. 自定义UIView:自定义UIView是iOS开发中的常见操作,它允许开发者创建具有特定功能或外观的视图。在这个项目中,StartAppPageViewControl可能是自定义的PageControl类,继承自UIView,并重写其drawRect方法来绘制...

    ios-简单自定义圆形颜色渐变进度条.zip

    在iOS开发中,自定义视图常常用于提供独特的用户体验,特别是在UI设计中,自定义进度条可以提升应用的视觉效果。本项目“ios-简单自定义圆形颜色渐变进度条”正是关注于这一方面,旨在创建一个具有颜色渐变效果的...

    ios-绘制圆上的点.zip

    在iOS开发中,绘制图形是一项基础且重要的任务,特别是在创建自定义UI或者动画效果时。这个"ios-绘制圆上的点.zip"项目显然涉及到在圆形路径上绘制点,并且优化了动画性能,使得动画更加流畅。现在我们来深入探讨...

    ios-一个简单的画圆demo.zip

    在iOS开发中,有时我们需要实现自定义的图形绘制,例如创建一个简单的画圆示例。这个"ios-一个简单的画圆demo.zip"压缩包提供了一个基础的代码示例,教你如何在iOS应用中使用Swift语言纯代码方式绘制一个圆形。我们...

    ios-一句话划线画圆.zip

    在iOS应用中,可以使用`UIBezierPath`类来绘制自定义图形,包括直线。`UIBezierPath`提供了一系列方法,允许开发者指定路径的各个点,从而构建出复杂的形状。在这个例子中,可能封装了一个或两个函数,它们接受起点...

    ios-圆形图.zip

    在iOS应用中实现圆形图,开发者通常会用到UIKit框架中的UIView或其子类,结合Core Graphics(简称CG)框架来完成自定义绘图。以下是一些关键知识点: 1. **UIView**:是所有自定义视图的基础,它提供了显示在屏幕上...

    ios-绘制圆和圆上的点.zip

    本教程通过"ios-绘制圆和圆上的点.zip"压缩包中的DrawTest项目,展示了如何利用Core Graphics框架来实现动态地画圆以及在其上绘制点,并通过动画执行线段。虽然当前版本存在性能问题,但其提供的思路对于学习iOS绘图...

    iOS纯代码画圆形图

    在iOS开发中,有时我们需要自定义视图来呈现特定的数据或设计效果,比如画出圆形图。本示例提供了一个简单的iOS应用,它使用Objective-C(OC)语言实现了纯代码绘制圆形图的功能,而且带有半封装的形式,方便开发者...

    ios应用源码之圆形时钟 2018127

    1. 自定义UIView:在iOS开发中,自定义UIView是一种常见的做法,它允许开发者扩展基本的视图组件以满足特定需求。创建一个自定义的圆形时钟视图,开发者需要重写`draw(_:)`方法,在这里使用Core Graphics框架进行...

    (0077)-iOS/iPhone/iPAD/iPod源代码-按钮(Button)-Radio Button With UIKit

    总之,通过自定义UIView并结合UIKit的控制机制,我们能够轻松地在iOS应用中实现单选按钮的功能。这个过程涉及到图形绘制、事件处理、状态管理等多个方面,对于深化对iOS开发的理解非常有帮助。如果你想要在你的应用...

    IOS应用源码之圆形时钟 .rar

    在这个项目中,开发者可能会使用`UIView`子类来创建自定义的圆形时钟视图,并利用`CADisplayLink`或`NSTimer`来实现时间的实时更新。 3. **自定义视图(Custom View)**: - 开发者可能会创建一个自定义的`UIView`...

    用圆画动画

    首先,创建一个自定义的UIView子类,比如名为`CircleProgressView`。在这个类中,我们需要初始化圆的中心点、半径、颜色以及初始进度。 ```swift class CircleProgressView: UIView { var circleRadius: CGFloat ...

    swift-drawrect实现的圆形进度条

    在iOS应用开发中,UI设计往往需要各种各样的视图组件来展示信息,其中进度条是一种常见的元素。本文将深入探讨如何使用Swift编程语言中的`drawRect`方法来实现一个自定义的圆形进度条。首先,我们需要理解`drawRect`...

    进度条demo

    关于**圆形**进度条,iOS中实现圆形进度条的方式通常包括使用`UIBezierPath`画圆和使用贝塞尔曲线来形成弧形路径。在这个实例中,进度条可能是通过在贝塞尔曲线上截取一定比例的弧度来表示进度的。通过调整`...

Global site tag (gtag.js) - Google Analytics