Iphone 手指画在横向模式下不工作

Iphone 手指画在横向模式下不工作,iphone,ios5,draw,quartz-graphics,Iphone,Ios5,Draw,Quartz Graphics,我已经做了几天了,尝试了几件事,但仍然坚持下去。希望我能理解什么是错的,并找到可能的解决办法,这让我现在有点疯狂。我提前感谢任何帮助我的人 上下文:我正在为黑板制作一个演示(这意味着还不是一个应用程序,只是一个概念证明)。出于“防止垃圾邮件”的原因,StackOverflow不允许我发布有问题的图片,所以我尝试链接我的Dropbox帐户以显示图片。请看这个: 您可以在图1中看到纵向模式下的黑板 问题:我实际上有两个问题 第一个是,在纵向模式下,绘图似乎工作得很好,但是当我切换时 对于横向模式,

我已经做了几天了,尝试了几件事,但仍然坚持下去。希望我能理解什么是错的,并找到可能的解决办法,这让我现在有点疯狂。我提前感谢任何帮助我的人

上下文:我正在为黑板制作一个演示(这意味着还不是一个应用程序,只是一个概念证明)。出于“防止垃圾邮件”的原因,StackOverflow不允许我发布有问题的图片,所以我尝试链接我的Dropbox帐户以显示图片。请看这个:

您可以在图1中看到纵向模式下的黑板

问题:我实际上有两个问题

第一个是,在纵向模式下,绘图似乎工作得很好,但是当我切换时 对于横向模式,绘图区域似乎不能反映不同的大小

第二个问题是,尽管包含黑板的UIImageView的大小正确(即与上面的条不重叠),但我似乎无法强制执行绘图区域的边界。这在纵向和横向模式下都会发生

您可以在上一个链接的图2中看到这两个问题;在纵向模式下,绘图将在其停止的位置停止,并且它还使用颜色和橡胶在条形图上绘图

代码:下面是选择器处理触摸的代码。在上面链接的图3中,我还附上了一张关于nib文件结构的快照

//viewDidLoad in MyViewController.m. DrawImage is the UIImageView containing the board
- (void)viewDidLoad {
[super viewDidLoad];
drawImage = [[UIImageView alloc] initWithImage:nil];
drawImage.frame = self.view.frame;
[self.view addSubview:drawImage];

mouseMoved = 0;
colorCode = 1;

red = 1.0;
green = 1.0;
blue = 1.0;

}


//touchesBegan in MyViewController.m
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        mouseSwiped = NO;

        UITouch *touch = [touches anyObject];

        if([touch tapCount] == 2) {
            drawImage.image = nil;

            return;
        }

        lastPoint = [touch locationInView:self.view];
}


//touchesMoved in MyViewController.m
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
mouseSwiped = YES;

UITouch *touch = [touches anyObject];   
CGPoint currentPoint = [touch locationInView:self.view];

UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 4.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);

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

CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

lastPoint = currentPoint;

mouseMoved++;

if (mouseMoved == 10) {
    mouseMoved = 0;
}

}


//touchesEnded in MyViewController.m
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];

if ([touch tapCount] == 2) {
    drawImage.image = nil;
    return;
}


if(!mouseSwiped) {
    UIGraphicsBeginImageContext(self.view.frame.size);
    [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    CGContextFlush(UIGraphicsGetCurrentContext());
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}
}
我尝试的内容:在发布之前,我尝试了一些事情。我注意到,在横向模式下,坐标的变化是边界而不是帧。例如,在纵向和横向中,self.view.frame.width和height分别保持在320和480,而在横向中,边界更改为480和320。因此,我试图将路径和矩形建立在边界上,但不幸的是,我开始(显然)绘制具有奇怪坐标的奇怪图形


我觉得我不能在绘图上强制执行正确边界的原因在于,绘图区域是在主视图的框架上确定的,该框架横跨整个窗口。我试图将包含该板的UIImageView插入到另一个视图中(大小正确),并将其链接到MyViewController.h上定义的插座,但不幸的是,这并没有改变任何问题。

在TouchsMoved:method中,您可以设置一个条件来检测触摸是否在包含黑板的UIImageView上,或者它是一个不同的视图。如果它不是黑板视图,则返回它而不绘制图像。

在TouchsMoved:method中,您可以设置一个条件来检测触摸是否正确在UIImageView上包含黑板或它的另一个视图。如果不是黑板视图,则返回它而不绘制图像。

我最终以Apple文档中建议的方式解决了这个问题;我创建了一个横向视图控制器,并让肖像在过渡到这一点。
很好地工作。

我最终以苹果文档中建议的方式解决了这个问题;我创建了一个横向视图控制器,并让肖像在过渡到这一点。
效果很好。

谢谢你的回答。我不完全清楚如何检查触摸屏上的视图,也不清楚为什么要检查它。在我的代码中,我在self.view上画了一个rect,我会想象这就是触摸屏所在的视图?再次感谢。您正在将drawImage frame设置为self.view,然后在其上绘图。我的建议是,从drawImage的某些y+100值开始,然后仅在其上绘制黑板。剩余的掸子和颜色选项可以作为按钮放在drawImage顶部的self.view上,这样你就可以很容易地识别触摸发生的位置。再次感谢。我有点困惑。。。我试过了我相信从你的建议中我能理解的东西。我设置drawImage.frame=CGRectMake(100100320480);结果,我画的线,在这些坐标的容量上发生了位移。我猜这意味着它实际上是在DrawImage上绘制的?干杯。你可以这么说(但不是那样,你通过的是整个屏幕框架作为上下文..它可以画出整个区域)…但您必须修改代码才能更好地理解。请阅读iOS文档中的UIGraphicsBeginImageContext内容如何工作等等…UIGraphicsBeginImageContext与将drawImage.frame设置为self.view.frame有何关系?谢谢您的回答。我不完全清楚如何检查触摸屏上的视图,也不清楚为什么要检查它。在我的代码中,我在self.view上画了一个rect,我会想象这就是触摸屏所在的视图?再次感谢。您正在将drawImage frame设置为self.view,然后在其上绘图。我的建议是,从drawImage的某些y+100值开始,然后仅在其上绘制黑板。剩余的掸子和颜色选项可以作为按钮放在drawImage顶部的self.view上,这样你就可以很容易地识别触摸发生的位置。再次感谢。我有点困惑。。。我试过了我相信从你的建议中我能理解的东西。我设置drawImage.frame=CGRectMake(100100320480);结果,我画的线,在这些坐标的容量上发生了位移。我猜这意味着它实际上是在DrawImage上绘制的?干杯。你可以这么说(但不是那样,你通过的是整个屏幕框架作为上下文..它可以画出整个区域)…但您必须修改代码才能更好地理解。请阅读iOS文档中的UIGraphicsBeginImageContext是如何工作的等等…UIGraphicsBeginImageContext与将drawImage.frame设置为self.view.frame有何关联?