`
lizaochengwen
  • 浏览: 659659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

鼠标移动划线

 
阅读更多
PaintView.h

CGPoint lastPoint;
UIImageView *lineImageView;


PaintView.m

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        lineImageView = [[UIImageView alloc] initWithFrame:frame];
             lineImageView.backgroundColor = [UIColor grayColor];
        [self addSubview:lineImageView];
    }
   
    return self;
}

- (void)drawRect:(CGRect)rect
{   
    CGContextRef c = UIGraphicsGetCurrentContext();  // 获取当前的设备上下文,必须在drawRect中获取,否则会出错
   
    CGContextSetLineCap(context, kCGLineCapRound); // 设置划线样式
    CGContextSetLineWidth(context, 6);
    CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);   // 设置画出的线的颜色信息
   
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, 10, 10);
    CGContextAddLineToPoint(context, 100, 100);
   
    CGContextStrokePath(context);  // 绘出图形

    [super drawRect:rect];
}

// 移动鼠标划线
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *aTouch = [touches anyObject];
    lastPoint = [aTouch locationInView:self];
   
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextSetAllowsAntialiasing(context, YES);
   
    CGContextMoveToPoint(context, 0, 15);
    CGContextAddEllipseInRect(context, CGRectMake(0, 0, 70, 70));
   
    CGContextDrawPath(context, 1);
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *aTouch = [touches anyObject];
   
    CGPoint currentPoint = [aTouch locationInView:self];
   
      UIGraphicsBeginImageContext(self.frame.size);   // 创建一个bitmap设备上下文  如果不创建,UIGraphicsGetCurrentContext()不能获取当前设备上下文
   

      [lineImageView.image drawInRect:CGRectMake(0, 0, 768, 1024)];  // 设置图形的显示区域

    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 7);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 1.0, 1.0, 1.0);

    CGContextBeginPath(UIGraphicsGetCurrentContext());

    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());

    [lineImageView setImage:UIGraphicsGetImageFromCurrentImageContext()];
    UIGraphicsEndImageContext();  // 关闭创建的设备上下文
   
    lastPoint = currentPoint;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIGraphicsBeginImageContext(self.frame.size);
    [lineImageView.image drawInRect:CGRectMake(0, 0, 768, 1024)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 7);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 1.0, 1.0, 1.0);
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    CGContextFlush(UIGraphicsGetCurrentContext());
    [lineImageView setImage:UIGraphicsGetImageFromCurrentImageContext()];
    UIGraphicsEndImageContext();

}
分享到:
评论

相关推荐

    根据鼠标移动在屏幕上画线

    下面将详细介绍如何利用全局DC(Device Context)实现在屏幕上根据鼠标移动画线。 首先,我们需要了解什么是DC。在Windows编程中,DC是一个对象,它包含了与特定设备相关的图形输出信息,如屏幕、打印机或图像设备...

    easyx画线实现_计算机图形学_画线_easyx的线_easyX_easyxpoint_

    在计算机图形学中,画线是一项基础且重要的任务,它涉及到屏幕像素的精确控制和算法的应用。EasyX是一个简易的图形库,专为C++设计,使得初学者和专业人士能够轻松进行图形绘制。本篇文章将深入探讨如何使用EasyX...

    QT_QPaintPath跟随鼠标绘制图形(画笔)

    当鼠标按下时,可以在QPaintPath中开始一个新的路径,并在鼠标移动事件`mouseMoveEvent()`中不断添加点到路径中。当鼠标释放时,路径完成,可以进行后续的处理,如保存路径信息或者在路径上添加标注。 为了使图形...

    WPF用鼠标在Canvas画线

    - **MouseMove**:当鼠标移动时触发,如果左键被按下,则持续画线。 - **MouseLeftButtonUp**:当鼠标左键释放时触发,结束画线。 ```csharp private Point? _startPoint; private Pen _pen; private void Canvas_...

    canvas动态划线(canvas跟随鼠标变幻线条...)

    canvas动态划线(canvas跟随鼠标变幻线条,知乎登录页面动态线条背景动画代码) 每次被下载,所需积分就被平台自动叠加,感觉有点傻,无奈重新编辑上传,感觉可选的这个1-5积分就有点少,算了无所谓了你们能下载就好

    C++实现鼠标的轨迹

    4. **鼠标消息**:当鼠标移动时,操作系统会向窗口发送`WM_MOUSEMOVE`消息。还有其他与鼠标相关的消息,如`WM_LBUTTONDOWN`(左键按下)、`WM_LBUTTONUP`(左键释放)等。 5. **处理鼠标消息**:你需要定义一个窗口...

    PyQ5 Mtaplotlib Dataframe画一条随鼠标移动的竖线并标出坐标、标注

    本例代码使用了Python的PyQt5、matplotlib和Dataframe画图,并在图中添加了一条随鼠标移动的虚线,之后经过计算在画图的线上标注出了鼠标在当时x轴停留时的数据,本例只是一个简单的例子,自己可以根据功能修改

    通过鼠标交互实现画线

    在MouseDown事件中记录起始点,在MouseMove事件中根据鼠标的移动绘制线条,在MouseUp事件中结束画线。 ```csharp private Point startPoint; private bool isDrawing; private void pictureBox1_MouseDown(object ...

    VC画基准线,随鼠标移动

    本教程将探讨如何在MFC对话框中实现“画基准线并随鼠标移动”的功能。这个功能常见于图形编辑或测量类应用,允许用户通过鼠标交互来定位、标记或测量界面中的元素。 首先,我们需要创建一个基于MFC的对话框项目。在...

    在图形中,随着鼠标的移动显示十字交叉线

    要使十字交叉线随着鼠标移动而更新,我们需要处理WM_MOUSEMOVE消息。当鼠标在窗口内移动时,此消息会被发送。在消息处理函数中,再次调用InvalidateRect函数来标记需要重绘的区域,然后Windows会自动调用OnPaint...

    visual c++制作 图片跟着鼠标移动,显示鼠标移动轨迹

    为了显示轨迹,可以使用`MoveTo`和`LineTo`函数在画布上画线,连接鼠标之前的位置和当前位置。 4. **重绘策略**:每次鼠标移动时,我们可能不希望立即重绘整个窗口,因为这可能导致性能下降。可以通过在`...

    Windows使用QT获取鼠标的位置坐标和移动趋势(相对位移)

    以下是一个简单的示例代码,展示了如何监听鼠标移动并计算相对位移: ```cpp class MyWidget : public QWidget { Q_OBJECT public: MyWidget(QWidget *parent = nullptr) : QWidget(parent) {} protected: void ...

    鼠标移动样式,鼠标移动效果

    根据给定的信息,本文将详细解释“鼠标移动样式”与“鼠标移动效果”的相关知识点。 ### 一、鼠标移动样式概述 鼠标移动样式是指在网页或应用程序中,鼠标指针根据用户操作或页面元素的不同而变化的样式。通过改变...

    VB鼠标划线,不按鼠标即画线

    每次鼠标移动时,更新标签的Text属性,显示当前的坐标。 此外,还需要考虑窗体的Paint事件,因为当窗体被部分或全部覆盖后重新显示时,我们需要清除旧的线条,防止线条堆积。在Paint事件中,可以使用Graphics对象的...

    VC++里用鼠标画直线

    例如,`WM_MOUSEMOVE`消息表示鼠标移动,`WM_LBUTTONDOWN`和`WM_LBUTTONUP`分别代表左键按下和释放。当用户按下并拖动鼠标时,我们需要捕获这些消息并根据鼠标位置更新直线。 1. 创建窗口类: 在MFC中,我们需要...

    vc++划线源程序跟随鼠标画线

    为了使画线过程平滑,可能需要在每次鼠标移动时都调用Invalidate()函数,强制重绘窗口。 至于显示“猪头”和“猪尾巴”,这可以通过在适当的位置绘制位图或者自定义形状来实现。可以在OnLButtonDown()和OnLButtonUp...

    跟随鼠标移动十字坐标显示,炫酷

    本项目所介绍的就是一种这样的技术——“跟随鼠标移动的十字坐标显示”。这个小功能可以在用户鼠标在页面上移动时,实时地显示一个十字架标记,指示出鼠标的当前位置,给人一种酷炫且个性化的视觉效果。 要实现这个...

    使用Canvas进行鼠标画图和线程画线

    鼠标移动时,根据起始位置和当前鼠标位置绘制线条;释放鼠标时,停止绘制。 ```javascript let isDrawing = false; let start = null; canvas.addEventListener('mousedown', (e) => { isDrawing = true; start ...

    MFC鼠标画线

    每次鼠标移动,都会根据当前位置即时更新线段的终点,提供了一个实时的画线体验。 总的来说,MFC提供了一种方便的方式来构建Windows桌面应用程序,包括交互式的图形绘制。通过处理鼠标事件和利用GDI(Graphics ...

Global site tag (gtag.js) - Google Analytics