右上角的对角线试图在 UIView 上绘制

Posted

技术标签:

【中文标题】右上角的对角线试图在 UIView 上绘制【英文标题】:diagonal lines from the top right trying to draw on a UIView 【发布时间】:2017-12-06 20:05:44 【问题描述】:

我有一个名为 Slate 的平板电脑,我可以从中处理 x,y 点。我可以将这些 x,y 点传递给我的“drawShape”函数,相当于 touchesMoved 函数。我有一个为此目的设计的自定义 UIView 类,具有 4 个主要功能。前三个是touchesbegan/moved/ended,还有一个drawRect。

这是 UIView 子类的源代码...

//
//  DrawingLayerView.m
//
//
//  Created by Monica Kachlon on 12/3/17.
//

#import "DrawingLayerView.h"
#include "UIBezierPath+Interpolation.h"


@interface StrokeA : NSObject

@property (assign, nonatomic) CGPoint startPoint;

- (id)initWithStartPoint:(CGPoint)point;


@property (strong, nonatomic) NSMutableArray * points;

@end

@implementation StrokeA



- (id)initWithStartPoint:(CGPoint)point 
    self = [super init];
    self.startPoint = point;
    self.points = [NSMutableArray array];

    return self;



@end



@implementation DrawingLayerView

NSMutableArray * strokes;
NSMutableArray * points;


StrokeA * currentStroke;
UIBezierPath * currentPath;
UIBezierPath *path;
UIBezierPath *pathTwo;

UIBezierPath *Newpath;
CAShapeLayer * currentLayer;


- (void) noodlez

path = [UIBezierPath bezierPath];

   currentPath = [UIBezierPath bezierPath];

    pathTwo = [UIBezierPath bezierPath];

    Newpath = [UIBezierPath bezierPath];
     strokes = [NSMutableArray array];
     points = [NSMutableArray array];


- (void)startTouch: (CGPoint)point


    currentStroke = [[StrokeA alloc] initWithStartPoint:point];
    [strokes addObject:currentStroke];


- (UIBezierPath *)createPath 
    UIBezierPath * bezierPath = [UIBezierPath bezierPath];
    for (StrokeA * stroke in strokes) 
        [bezierPath moveToPoint:stroke.startPoint];
        for (NSValue * value in stroke.points) 
            [bezierPath addLineToPoint:[value CGPointValue]];
        
    
    return bezierPath;



- (void)endTouch: (CGPoint)point


    [points removeAllObjects];
    [self setNeedsDisplay];

- (void)drawShape: (CGPoint)point

    if (!currentStroke) 
        [self startTouch:point];
    
    [currentStroke.points addObject:[NSValue valueWithCGPoint:point]];
    pathTwo = [self createPath];

    [self setNeedsDisplay];



- (void)drawRect:(CGRect)rect 
    [[UIColor blackColor] setStroke];
    [pathTwo stroke];



@end

这是屏幕截图。

我试着写“好吗?”只是为了说明问题。

【问题讨论】:

您需要包含足够多的代码,以便其他人可以看到您在做什么,以帮助找出您做错了什么。请看How do I ask a good question? 不确定您还需要哪些其他信息。这些是程序运行的 4 个主要功能。 这里的一些乐于助人的人可能想要运行您的代码来帮助您调试它...您发布的内容无法运行。见:How to create a Minimal, Complete, and Verifiable example 【参考方案1】:

尽管代码缺乏一些细节并且问题措辞不佳,但屏幕截图清楚地显示了路径的初始点在每种情况下都是 (0,0)。将路径中的点转储到控制台,您会看到它。弄清楚那些 (0,0) 是如何进入那里的,你就会解决问题。

【讨论】:

以上是关于右上角的对角线试图在 UIView 上绘制的主要内容,如果未能解决你的问题,请参考以下文章

在位图上绘制对角线文本

在窗体上绘制一条对角线,在调整窗体大小时重绘

JFrame窗口坐标错误

通过 <div> 或 <span> 的对角线

求一个3*3的整形矩阵对角线元素之和

R语言使用car包的scatterplotMatrix函数绘制散点图矩阵并添加线性和loess拟合线在主对角线上放置箱图密度或直方图在图像边缘添加轴须图rug可以基于分组变量绘制散点图矩阵