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

时间:2012-04-16 09:07:41

标签: iphone ios5 draw quartz-graphics

我已经在这几天了,尝试了几件事,但仍坚持下去。希望我能理解错误和可能的解决方案,这让我现在变得疯狂。我提前感谢任何人的帮助。

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

https://www.dropbox.com/gallery/5189052/1/so?h=8573b1

您可以在图像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上定义的插座,但不幸的是,这并没有改变任何问题。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

我终于以Apple文档中建议的方式解决了这个问题;我创建了一个风景视图控制器,让肖像转移到此。 效果很好。