• Quartz 2D 练习1触摸简单绘图


    总结:

    1、单点触摸时,获取坐标:[[touches anyObject] locationInView:self];

    2、需要更新图形显示内容时,调用 [self setNeedsDisplay];

    3、在绘图事件函数中使用 UIGraphicsGetCurrentContext() 得到画布

    4、画线使用 StrokePath

    5、绘图前清除旧的显示内容可使用背景色填充视图范围(本例中可以不要)

    6、绘图程序一般要支持屏幕自动旋转,在视图控制器的shouldAutorotateToInterfaceOrientation函数中返回YES

    TouchesView.h:

    #import <UIKit/UIKit.h>
    
    @interface TouchesView : UIView {
        CGPoint _startPos;
        CGPoint _lastPos;
        BOOL    _touched;
    }
    
    @end

    TouchesView.m:

    #import "TouchesView.h"
    
    @implementation TouchesView
    
    - (void)dealloc
    {
        [super dealloc];
    }
    
    - (BOOL)isMultipleTouchEnabled
    {
        return NO;
    }
    
    - (void)drawRect:(CGRect)rect
    {
        CGContextRef context = UIGraphicsGetCurrentContext();
        
        CGContextSetFillColorWithColor(context, self.backgroundColor.CGColor);
        CGContextFillRect(context, self.bounds);
        
        if (_touched) {
            if (CGPointEqualToPoint(_startPos, _lastPos)) {
                CGContextStrokeEllipseInRect(context, 
                    CGRectMake(_startPos.x - 40, _startPos.y - 40, 80, 80));
            } else {
                CGContextBeginPath(context);
                CGContextMoveToPoint(context, _startPos.x, _startPos.y);
                CGContextAddLineToPoint(context, _lastPos.x, _lastPos.y);
                CGContextStrokePath(context);
            }
        }
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        _startPos = [[touches anyObject] locationInView:self];
        _lastPos = _startPos;
        _touched = YES;
        [self setNeedsDisplay];
        
        NSLog(@"touchesBegan: %f,%f", _startPos.x, _startPos.y);
    }
    
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
        _lastPos = [[touches anyObject] locationInView:self];
        [self setNeedsDisplay];
    
        NSLog(@"touchesMoved: %f,%f", _lastPos.x, _lastPos.y);
    }
    
    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
        _touched = NO;
        [self setNeedsDisplay];
    }
    
    @end
  • 相关阅读:
    Java-LockSupport
    Kafka Eagle 安装
    Kafka shell
    python pip 使用
    Kafka 集群部署
    Kafka 概述
    DockerFile 简单使用
    《深入理解Java虚拟机》读书笔记
    linux安装redis
    Java多线程基础知识例子
  • 原文地址:https://www.cnblogs.com/rhcad/p/2221339.html
Copyright © 2020-2023  润新知