objective-c - 在点和手指之间画一条恒定的线

标签 objective-c ios xcode

我想做与应用程序 Scalar 所做的类似的事情,他们能够从一个点拖动到记事本上,以将数字粘贴到他们拖动点的位置。我真正感兴趣的是与点和手指保持连接的线,如下所示:

enter image description here

我的问题是我真的不知道这叫什么,所以我在寻找如何做到这一点时遇到了困难。有谁知道这叫什么,他们有关于这个主题的教程吗?如果您有一些代码供我查看就更好了,那就太好了。

谢谢。

最佳答案

这个 UIView 示例在手指拖动时绘制线条并检测要触摸的第一个 View ,应该可以帮助您入门。

//this goes in the header file called "UILineView.h"

#import <UIKit/UIKit.h>

@interface UILineView : UIView

@end

//this in the implementation file called "UILineView.m"

#import "UILineView.h"

@implementation UILineView

{
    CGPoint _originOfTouchPoint; // your fist touch detected in touchesBegan: method
    CGPoint _currentFingerPositionPoint; // the position you have dragged your finger to
    CGFloat _strokeWidth; // the width of the line you wish to draw
    id _touchStartedObject; // the object(UIView) that the first touch was detected on
}

// If you use Interface Builder to design your interface, Objects in a nib file are reconstituted and then initialized using
// their initWithCoder: method
- (id)initWithCoder:(NSCoder *)decoder
{
    self = [super initWithCoder:decoder];
    if (self) {
        // Initialization code
        _originOfTouchPoint = CGPointMake( 0.0, 0.0 );
        _currentFingerPositionPoint = CGPointMake( 100.0, 100.0 );
        _strokeWidth = 2.0;
    }
    return self;
}
/*
// Use initWithFrame if you are not loding the UIView from a nib file
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        _originOfTouchPoint = CGPointMake( 0.0, 0.0 );
        _currentFingerPositionPoint = CGPointMake( 100.0, 100.0 );
        _strokeWidth = 2.0;
    }
    return self;
}
*/

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    CGContextRef context    = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor( context, [UIColor blueColor].CGColor );
    CGContextSetLineWidth( context, _strokeWidth );
    // fisrt point of line
    CGContextMoveToPoint( context, _originOfTouchPoint.x, _originOfTouchPoint.y );
    // last point of line
    CGContextAddLineToPoint( context, _currentFingerPositionPoint.x, _currentFingerPositionPoint.y );
    // draw the line
    CGContextStrokePath( context );
}

#pragma mark touches

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // get starting point and first view touched (if you need to send that view messages)
    _originOfTouchPoint = [[touches anyObject] locationInView:self];
    _touchStartedObject = [[touches anyObject] view];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint movedToPoint = [[touches anyObject] locationInView:self];
    // if moved to a new point redraw the line 
    if ( CGPointEqualToPoint( movedToPoint, _currentFingerPositionPoint ) == NO )
    {
        _currentFingerPositionPoint = movedToPoint;
        // calls drawRect: method to show updated line
        [self setNeedsDisplay];
    }
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    // reset values
    _originOfTouchPoint = CGPointZero;
    _currentFingerPositionPoint = CGPointZero;
    _touchStartedObject = nil;
}

@end

关于objective-c - 在点和手指之间画一条恒定的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845754/

相关文章:

xcode项目打开没有.xcodeproj文件

objective-c - 自定义 NSPopUpButton 单元 socket /绑定(bind)

ios - 使用 UIButton 停止 NSTimer

ios - 等宽系统字体大小 :weight: Not available in iOS 12?

iphone - 如何在 iPhone sdk 中创建 excel 工作表和文件?

xcode - 生成 Core Data 子类后如何修复 Xcode 10 错误 'Multiple commands produce..'

ios - 在使用 .a 文件的 xcode 项目中,找不到 swift erorr 'map' 文件

objective-c - 好奇号: executing code in another thread inside the same method?

objective-c - 如何在核心数据中保留有序列表

ios - UIGraphicsGetImageFromCurrentImageContext() - 内存泄漏