Objective C 调整绘图区域的大小
我正在尝试将绘图区域调整为较小的尺寸,但每当我这样做时,我都会遇到这个输出类型(参见照片)。
当我开始写作时,它不会画一条线,而是拉伸一切。
我试图找出问题所在,但我所知道的还不够。
这是我的代码:
viewDidLoad:
touchDraw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"opaque.png"]];
touchDraw.frame = CGRectMake(0, 0, 768, 1024);
[self.view addSubview:touchDraw];
[self.view sendSubviewToBack:touchDraw];
touchMoved = 0;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
touchSwiped = NO;
UITouch *touch = [touches anyObject];
endingPoint = [touch locationInView:self.view];
endingPoint.y -= 35;
}
触摸:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
touchSwiped = YES;
UITouch *touch = [touches anyObject];
currentTouch = [touch locationInView:self.view];
currentTouch.y -= 35;
UIGraphicsBeginImageContext(self.view.frame.size);
[touchDraw.image drawInRect:CGRectMake(0, 0, 768, 1024)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
UIImage * textureColor = [UIImage imageNamed:@"Brush_Black.png"];
CGPoint vector = CGPointMake(currentTouch.x - endingPoint.x, currentTouch.y - endingPoint.y);
CGFloat distance = hypotf(vector.x, vector.y);
vector.x /= distance;
vector.y /= distance;
for (CGFloat i = 0; i < distance; i += 1.0f) {
CGPoint p = CGPointMake(endingPoint.x + i * vector.x, endingPoint.y + i * vector.y);
[textureColor drawAtPoint:p blendMode:blendMode alpha:0.5f];
}
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextStrokePath(UIGraphicsGetCurrentContext());
touchDraw.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
endingPoint = currentTouch;
touchMoved++;
if (touchMoved == 1) {
touchMoved = 0;
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if(!touchSwiped) {
UIGraphicsBeginImageContext(self.view.frame.size);
[touchDraw.image drawInRect:CGRectMake(0, 0, touchDraw.frame.size.width, touchDraw.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 25.0);
UIImage * textureColor = [UIImage imageNamed:@"Brush_Black.png"];
[textureColor drawAtPoint:CGPointMake(endingPoint.x, endingPoint.y) blendMode:blendMode alpha:1.0f];
CGContextStrokePath(UIGraphicsGetCurrentContext());
CGContextFlush(UIGraphicsGetCurrentContext());
touchDraw.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
}
I am trying to resize my drawing area to a smaller size but whenever i do that i'm having this kind of output (see the photo).
When i start to write it doesn't draw a line and just stretches everything.
i trying to figure out what's the problem but what i know is not enough.
Here's my code:
viewDidLoad:
touchDraw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"opaque.png"]];
touchDraw.frame = CGRectMake(0, 0, 768, 1024);
[self.view addSubview:touchDraw];
[self.view sendSubviewToBack:touchDraw];
touchMoved = 0;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
touchSwiped = NO;
UITouch *touch = [touches anyObject];
endingPoint = [touch locationInView:self.view];
endingPoint.y -= 35;
}
Touches:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
touchSwiped = YES;
UITouch *touch = [touches anyObject];
currentTouch = [touch locationInView:self.view];
currentTouch.y -= 35;
UIGraphicsBeginImageContext(self.view.frame.size);
[touchDraw.image drawInRect:CGRectMake(0, 0, 768, 1024)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
UIImage * textureColor = [UIImage imageNamed:@"Brush_Black.png"];
CGPoint vector = CGPointMake(currentTouch.x - endingPoint.x, currentTouch.y - endingPoint.y);
CGFloat distance = hypotf(vector.x, vector.y);
vector.x /= distance;
vector.y /= distance;
for (CGFloat i = 0; i < distance; i += 1.0f) {
CGPoint p = CGPointMake(endingPoint.x + i * vector.x, endingPoint.y + i * vector.y);
[textureColor drawAtPoint:p blendMode:blendMode alpha:0.5f];
}
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextStrokePath(UIGraphicsGetCurrentContext());
touchDraw.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
endingPoint = currentTouch;
touchMoved++;
if (touchMoved == 1) {
touchMoved = 0;
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if(!touchSwiped) {
UIGraphicsBeginImageContext(self.view.frame.size);
[touchDraw.image drawInRect:CGRectMake(0, 0, touchDraw.frame.size.width, touchDraw.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 25.0);
UIImage * textureColor = [UIImage imageNamed:@"Brush_Black.png"];
[textureColor drawAtPoint:CGPointMake(endingPoint.x, endingPoint.y) blendMode:blendMode alpha:1.0f];
CGContextStrokePath(UIGraphicsGetCurrentContext());
CGContextFlush(UIGraphicsGetCurrentContext());
touchDraw.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将此行更改
为这
可能会有所帮助。
Change this line
as this
This may help.