绘制字符串与图像
来源:互联网 发布:林忆莲 都市触觉 知乎 编辑:程序博客网 时间:2024/06/10 10:59
借鉴于斯坦福课程
.h
<span style="font-size:18px;">#import <UIKit/UIKit.h>@interface DrawingView : UIView@property (nonatomic) NSInteger rank;@property (nonatomic, strong) NSString *suit;@property (nonatomic) BOOL faceUp;- (void)pinch:(UIPinchGestureRecognizer *)gesture;@end</span>.m
<span style="font-size:18px;">#import "DrawingView.h"@interface DrawingView ()@property (nonatomic) CGFloat faceCardScaleFactor;@end@implementation DrawingView@synthesize faceCardScaleFactor = _faceCardScaleFactor;//因为同时自定义了setter和getter方法。#define DEFAULT_FACE_CARD_SCALE_FACTOR 0.90- (CGFloat)faceCardScaleFactor{ if (!_faceCardScaleFactor) { _faceCardScaleFactor = DEFAULT_FACE_CARD_SCALE_FACTOR; } return _faceCardScaleFactor;}- (void)setFaceCardScaleFactor:(CGFloat)faceCardScaleFactor{ _faceCardScaleFactor = faceCardScaleFactor; [self setNeedsDisplay];}- (void)setSuit:(NSString *)suit{ _suit = suit; [self setNeedsDisplay];}- (void)setRank:(NSInteger)rank{ _rank = rank; [self setNeedsDisplay];}- (void)setFaceUp:(BOOL)faceUp{ _faceUp = faceUp; [self setNeedsDisplay];}- (void)pinch:(UIPinchGestureRecognizer *)gesture{ if ((gesture.state == UIGestureRecognizerStateChanged) || (gesture.state == UIGestureRecognizerStateEnded)) { self.faceCardScaleFactor *= gesture.scale; gesture.scale = 1.0; }}// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (NSString *)rankAsString{ return @[@"?", @"A", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"J", @"Q", @"K", ][self.rank];}#define CORNER_FONT_STANDARD_HEIGHT 180.0#define CORNER_RADIUS 12.0- (CGFloat)cornerScaleFactor { return self.bounds.size.height / CORNER_FONT_STANDARD_HEIGHT; }- (CGFloat)cornerRadius { return CORNER_RADIUS * [self cornerScaleFactor]; }- (CGFloat)cornerOffset { return [self cornerRadius] / 3.0; }- (void)drawRect:(CGRect)rect { // Drawing code UIBezierPath *roundRect = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:12.0]; [roundRect addClip]; [[UIColor whiteColor] setFill]; UIRectFill(self.bounds); [[UIColor blackColor]setStroke]; [roundRect stroke]; if (self.faceUp) { UIImage *faceImage = [UIImage imageNamed:@"2"]; if (faceImage) { CGRect imageRect = CGRectInset(self.bounds, self.bounds.size.width * (1.0-self.faceCardScaleFactor), self.bounds.size.height * (1.0-self.faceCardScaleFactor)); [faceImage drawInRect:imageRect]; }else { [self drawPips]; } [self drawCorners]; }else{ [[UIImage imageNamed:@"1"]drawInRect:self.bounds]; } }- (void)drawPips{ }- (void)drawCorners{ NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init]; paragraphStyle.alignment = NSTextAlignmentCenter; UIFont *cornerFont = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; cornerFont = [cornerFont fontWithSize:cornerFont.pointSize *[self cornerScaleFactor]]; NSAttributedString *cornerText = [[NSAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@\n%@", [self rankAsString], self.suit] attributes:@{NSFontAttributeName:cornerFont, NSParagraphStyleAttributeName:paragraphStyle}]; CGRect textBounds; textBounds.origin = CGPointMake([self cornerOffset], [self cornerOffset]); textBounds.size = [cornerText size]; [cornerText drawInRect:textBounds]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, self.bounds.size.width, self.bounds.size.height); CGContextRotateCTM(context, M_PI); [cornerText drawInRect:textBounds];}- (void)setup{ self.backgroundColor = nil; self.opaque = NO; self.contentMode = UIViewContentModeRedraw;}- (void)awakeFromNib{ [self setup];}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { } return self;}@end</span>使用举例:
<span style="font-size:18px;">@property (weak, nonatomic) IBOutlet DrawingView *myDrawingView;</span>
<span style="font-size:18px;">self.myDrawingView.suit = @"♥️"; self.myDrawingView.rank = 13; [self.myDrawingView addGestureRecognizer:[[UIPinchGestureRecognizer alloc]initWithTarget:self.myDrawingView action:@selector(pinch:)]];</span>
<span style="font-size:18px;">- (IBAction)swip:(UISwipeGestureRecognizer *)sender { self.myDrawingView.faceUp = !self.myDrawingView.faceUp;}</span>
0 0
- 绘制字符串与图像
- 图像处理与绘制
- 文字与图像的绘制
- cvPutText:在图像上绘制文本字符串
- Java2D 图像缓冲与重复绘制
- Java2D 图像缓冲与重复绘制
- PhotoshopCS5 第四篇 绘制与编辑图像
- 自定义View绘制图像与移动字体
- 图像绘制与离屏渲染
- 绘制图像
- 图像绘制
- 图像绘制
- Python与图像处理(1):绘制图像,点和线,图像轮廓,直方图
- Halcon学习之八:图像区域叠加与绘制
- 图像处理学习笔记之直方图的计算与绘制
- 【python 图像绘制】图像绘制知识总结
- 【python图像处理】几何图形的绘制与文字的绘制(ImageDraw类详解)
- html5使用图像-绘制图像
- 【提权】udf提权入侵
- Struts2中使用validate校验框架
- Struts与Spring整合Scope
- KANSEI ROBOT
- (C语言)字符串反转相关问题
- 绘制字符串与图像
- C# 多线程
- Android各国语言values命名规则
- Maven报错
- CSAPP bomblab
- 小糖出品:类与对象的概念
- 文章标题
- 免费申请一年TexturePack和Phsics Editor使用
- byvoid面试阿里星 面试官的评价--我辈楷模