uiimage没有正确地进入子视图

时间:2012-07-20 00:08:35

标签: iphone ios ipad uiview uiimageview

这是一个难以解释的问题......但我会尽我所能。 首先是问题的背景,基本上我正在创建一个像ios的应用程序的绘画,并希望添加一个功能,允许用户选择图像的一部分(多点触摸显示一个不透明的矩形)和删除/复制粘贴/旋转那部分。我有删除和复制粘贴完美工作,但旋转是另一个故事。要旋转图像的一部分,我首先复制图像的一部分并将其设置为所选矩形图层的背景,然后用户使用滑块旋转任意角度。问题是有时图像最终会从矩形的另一个位置显示(意味着复制的图像挂在矩形的错角上)。我认为这可能是我的rectangle.frame.origin的一个问题,但通过各种测试,它的值似乎是正确的。它似乎也会根据拖动的方向而改变......

这些是问题的屏幕

1 http://i49.tinypic.com/dfu77m.jpg

2 http://i48.tinypic.com/14ikdxl.jpg

3 http://i46.tinypic.com/16kqpoi.jpg

在上述每种情况下,图像的不匹配部分应该在灰色矩形内部,我不知道问题是什么。

     bg = [[UIImageView alloc] initWithImage:[self crop:rectangle.frame:drawImage.image]];
     [rectangle addSubview:bg];

drawImage是用户绘图,矩形是选定的灰色区域。 crop是一种从给定矩形返回给定图像的一部分的方法。

我也无法粘贴任意旋转的图像..有关如何做到这一点的任何想法?

编辑:添加更多代码。

    -(void)drawRect:(int)x1:(int)y1:(int)x2:(int)y2{
     [rectangle removeFromSuperview];
     rectangle = [[UIView alloc] initWithFrame:CGRectMake(x1, y1, x2-x1, y2-y1)]; 
     rectangle.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:0.6];
     selectionImage = drawImage.image;
     drawImage.image = selectionImage;
     [drawImage addSubview:rectangle];
     rectangleVisible = true;
     rectangle.transform = transformation;

它与我绘制矩形的方式有什么关系吗? (上图)我从touchesMoved方法(下面)的一部分调用这个方法可能会导致问题(触摸1位于错误的位置可能导致宽度为负?)如果是这样,有没有一种简单的方法可以解决这个问题?

     if([[event allTouches] count] == 2 && !drawImage.hidden){
        NSSet *allTouches = [event allTouches];
        UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
        UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
        [self drawRect:[touch1 locationInView:drawImage].x :[touch1 locationInView:drawImage].y:
        [touch2 locationInView:drawImage].x :[touch2 locationInView:drawImage].y];   
     }

1 个答案:

答案 0 :(得分:2)

我不确定这是不是你的问题,但看起来你只是假设touch1代表左上角的触摸。我会从标准化矩形开始。

// Standardizing the rectangle before making it the frame.
CGRect frame = CGRectStandardize(CGRectMake(x1, y1, x2-x1, y2-y1));
rectangle = [[UIView alloc] initWithFrame:frame];