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

iOS-在画布上写文字

 
阅读更多

iOS-在画布上写文字

 

有时候需要自定义一个UIView,然后在自定义的UIView上输出一段文字。如下面的例子和演示图。

需要注意的是以下几点:

1. ios7 采用方法 [_text drawInRect:rect withAttributes:attribute]; 而ios7之前是采用[_text drawInRect:self.bounds withFont:font]。

2.CGSize sizeText = [_text boundingRectWithSize:self.bounds.size
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{
                                                        NSFontAttributeName:font,//设置文字的字体
                                                        NSKernAttributeName:@10,//文字之间的字距
                                                        }
                                              context:nil].size 用来计算单行或多行文字的高度和宽度

 

 

ZJQView02.h

#import <UIKit/UIKit.h>

@interface ZJQView02 : UIView

@property (nonatomic,strong) NSString* text;

@end

 

ZJQView02.m

#import "ZJQView02.h"
#define IOS7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0 //判断SDK版本号是否是7.0或7。0以上

@implementation ZJQView02

-(instancetype)initWithFrame:(CGRect)frame{
    self=[super initWithFrame:frame];
    if (self) {}
    return self;
}

-(void)drawRect:(CGRect)rect{
    //An opaque type that represents a Quartz 2D drawing environment.
    //一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    /*写文字*/
    UIFont  *font = [UIFont boldSystemFontOfSize:12.0];//定义默认字体
    if (IOS7) {
        NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
        paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
        paragraphStyle.alignment=NSTextAlignmentCenter;//文字居中:发现只能水平居中,而无法垂直居中
        NSDictionary* attribute = @{
                                    NSForegroundColorAttributeName:[UIColor redColor],//设置文字颜色
                                    NSFontAttributeName:font,//设置文字的字体
                                    NSKernAttributeName:@10,//文字之间的字距
                                    NSParagraphStyleAttributeName:paragraphStyle,//设置文字的样式
                                    };
        
        //计算文字的宽度和高度:支持多行显示
        CGSize sizeText = [_text boundingRectWithSize:self.bounds.size
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{
                                                        NSFontAttributeName:font,//设置文字的字体
                                                        NSKernAttributeName:@10,//文字之间的字距
                                                        }
                                              context:nil].size;
        
        CGFloat width = self.bounds.size.width;
        CGFloat height = self.bounds.size.height;
        
        //为了能够垂直居中,需要计算显示起点坐标x,y
        CGRect rect = CGRectMake((width-sizeText.width)/2, (height-sizeText.height)/2, sizeText.width, sizeText.height);
        [_text drawInRect:rect withAttributes:attribute];
    }else{
        CGContextSetRGBFillColor (context,  1, 0, 0, 1.0);//设置填充颜色:红色
        [_text drawInRect:self.bounds withFont:font];
    }
}

@end

 

 

 

ViewController990.h

#import <UIKit/UIKit.h>
#import "ZJQView02.h"

@interface ViewController990 : UIViewController
{
@private
    
    ZJQView02* zjqView02;
}
@end

 

ViewController990.m

#import "ViewController990.h"
#import "MyLog.h"
#define IOS7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0 //判断SDK版本号是否是7.0或7。0以上


@interface ViewController990 ()

@end

@implementation ViewController990

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

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

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    zjqView02.center=CGPointMake(self.view.center.x, (self.view.bounds.size.height-zjqView02.frame.origin.y)/2);//移到屏幕中心点
    [MyLog logViews:self.view.window];
}

-(void) doInit {
    //IOS7版本特殊处理
    if (IOS7) {
        self.edgesForExtendedLayout=UIRectEdgeNone;
    }
    self.view.backgroundColor=[UIColor whiteColor];
    zjqView02 = [[ZJQView02 alloc]initWithFrame:CGRectMake(50, 50, 200, 60)];
    zjqView02.backgroundColor=[UIColor yellowColor];
    zjqView02.text=@"我是测试文字我是测试文字";
    
    [self.view addSubview:zjqView02];
}

@end

 

执行效果如下:



 

 项目工程请参考附近中的demo010.zip

 

 

 

 

 

 

 

 

 

 

  • 大小: 39.2 KB
分享到:
评论

相关推荐

    ios-画特殊图形的绘画板.zip

    此外,“能插入文字”表明应用支持在画布上添加文本。在iOS中,我们可以使用`CTFramesetterCreateWithAttributedString`创建一个`CTFramesetter`对象,然后通过`CTFrameCreateWithText`生成一个`CTFrame`,最后在`...

    ios-图片验证码.zip

    同时,我们可以利用`CGContextShowTextAtPoint`方法在画布上写入随机生成的文字。 4. **随机性**:为了使验证码难以被机器破解,我们需要确保生成的图形和文字具有足够的随机性。这可以通过使用`arc4random_uniform...

    ios-绘画板.zip

    在iOS平台上,开发一款绘画板应用是一个非常有趣的挑战,它涉及到许多关键技术点,尤其是手势识别和图形绘制。本文将深入探讨“ios-绘画板.zip”项目中的关键知识点,包括手势识别、文字视图以及基本的图形绘制技术...

    ios-画板.zip

    在iOS平台上,开发一款画图应用是一个常见的任务,它能够为用户提供一个自由创作的空间,比如"ios-画板"这个项目就是一个很好的实例。这个Demo应用实现了基本的绘画功能,包括画笔选择、画笔粗细调整、颜色选择、...

    ios-swift验证码.zip

    本项目“ios-swift验证码.zip”是将原有的Objective-C实现的验证码功能转化为Swift语言,这展示了Swift在图形处理和用户体验设计上的应用。下面我们将深入探讨Swift中创建验证码的相关知识点。 首先,验证码的核心...

    ios-画板涂鸦.zip

    在iOS平台上,开发一款画板涂鸦应用是一个充满创意和技术挑战的任务。这样的应用通常需要提供用户一个自由发挥的空间,让他们可以随心所欲地绘制、涂鸦,甚至添加文字和其他元素。下面,我们将深入探讨iOS画板涂鸦...

    ios-仿新浪微博截屏分享.zip

    它展示了如何在iOS应用中集成截图、编辑和分享的功能,这对于提升用户体验,尤其是社交媒体类应用来说至关重要。开发者通过这个项目可以学习到iOS中的图像处理、UI设计以及交互实现等多方面的技术。 【描述】提到的...

    ios-可定制的圆盘时钟.zip

    要将12个小时均匀地分布在圆盘上,我们需要计算每个小时对应的角度。由于一个完整圆周是360度,所以每个小时占据30度的角度。 5. **绘制圆边** 使用`CGContext`的`addEllipse(in:)`方法绘制一个圆形路径,然后...

    ios-封装的一个纯StoryBoard布局的Nav Tabbar.zip

    在iOS应用开发中,使用StoryBoard进行界面布局已经成为一种常见的做法。`ios-封装的一个纯StoryBoard布局的Nav Tabbar.zip`这个项目显然关注的是如何通过纯Storyboard来实现导航(Navigation)与标签栏(Tab Bar)相...

    iOS 基于图形上下文的小画板

    - **概念**:图形上下文是iOS中用于绘制2D图形的对象,它可以理解为一个画布,开发者可以在其上执行绘图操作,如线条、形状、文字等。 - **类型**:主要有屏幕上下文(UIGraphicsGetCurrentContext()返回)和离屏...

    ios axure 组件

    在实际操作中,使用Axure的iOS组件时,首先需要在Axure RP的部件面板中找到对应的iOS7组件库,然后拖拽到画布上。可以自定义组件的颜色、大小、文字内容,甚至可以通过添加动态面板和用例来实现复杂的交互效果。此外...

    ios手绘画板app

    这款App可以视为iOS设备上的"Windows画图"工具,提供基本的绘图功能,如绘制线条、形状以及添加文字。以下是一些关键的知识点和实现步骤: 1. **用户界面(UI)设计**: - 使用Interface Builder或SwiftUI创建简洁...

    uniapp修改微信头像加边框加文字

    - **canvas.fillText**:在canvas上写入文字,可以指定位置、字体、颜色等属性。 - **文字布局**:考虑文字的位置和大小,确保其不会覆盖到头像,可以使用测量方法计算合适的位置。 5. **微信小程序特定操作** -...

    ios Airprint,打印报表

    在iOS平台上,AirPrint是一项非常实用的功能,它允许用户通过Wi-Fi无线网络将内容从iPhone、iPad或iPod touch直接打印到支持AirPrint的打印机上。这个“ios AirPrint,打印报表”项目显然关注如何利用AirPrint技术来...

    绘图源码_ios源码

    这份源代码可能包含了实现用户界面、图形渲染、手势识别、触摸事件处理等多个关键模块,帮助开发者深入理解如何在iOS平台上创建一个自定义的绘图工具。在iOS开发中,图形绘制通常涉及到Core Graphics框架,它提供了...

    IOS11最新元件库

    拖放这些组件到画布上,即可开始设计。对于每个组件,还可以利用Axure的特性,如设置动态面板状态、添加交互事件等,来实现更为复杂的行为模拟。 总之,"iOS11最新元件库"是一个宝贵的资源,它结合了iOS 11的设计...

    IOS手势解锁

    在iOS操作系统中,手势解锁是一种安全且直观的设备解锁方式,它允许用户通过在触摸屏上绘制特定的图案来解锁设备。本文将深入探讨iOS手势解锁的功能、工作原理以及如何实现这一功能。 ### 一、手势解锁的概念 手势...

    HTML5画布实现的超酷文字弹跳球效果

    今天我们分享一个来超酷弹跳球效果,这里我们使用纯HTML5的画布来实现动画及其图形。整个效果使用小球来组合生成字体,如果你的鼠标逼近这些小球,它们会四散...已覆盖Android、iOS、WP、Symbian、Kjava操作系统平台。

    IOS应用源码——tab标签效果.zip

    在iOS应用设计中,它通常位于屏幕底部,显示一系列的图标或文字标签,用户可以通过点击这些标签在不同的视图间切换。 1. **创建Tab Bar Controller**: 在Xcode中,可以使用Storyboard或代码创建Tab Bar ...

Global site tag (gtag.js) - Google Analytics