【问题标题】:Implementing iFog like app - Revealing inner UIImage实现 iFog 之类的应用程序 - 揭示内部 UIImage
【发布时间】:2011-09-29 21:59:33
【问题描述】:

我正在尝试实现类似 iFog 的视图,这意味着当您可以像手指一样在屏幕上涂抹时,它会显示下面的内容。

到目前为止,我所做的有两个问题:

  1. 当我第一次触摸屏幕时,它不会显示圆圈下方的内容,而是显示整个黑色矩形。屏幕上的下一个触摸按预期工作。

  2. 当我快速滚动鼠标时 - 实际上甚至没有那么快(仍在模拟器上测试) - 它似乎处理得不好,如下图圆圈之间的间隙所示。 也许与提高我所做的事情的性能有关。

附上图片来说明黑色矩形和间隙。

我的代码:(UIView 子类) 基本上我会显示第一张图片,然后用手指在屏幕上移动来显示第二张图片。

- (void)drawRect:(CGRect)rect
{

    if (didStartTouching)
    {

        CGContextRef contextRef = UIGraphicsGetCurrentContext();    

        CGContextAddArc(contextRef, rect.origin.x+CIRCLE_RADIUS, rect.origin.y+CIRCLE_RADIUS, CIRCLE_RADIUS, 0, 360, 0);            

        CGContextClip(contextRef);

        UIImage* img = [UIImage imageNamed:@"apple"];

        [img drawInRect:CGRectMake(0, 0, img.size.width, img.size.height)];    


    }
    else
    {
        UIImage* img = [UIImage imageNamed:@"default_pic_1"];

        [img drawInRect:CGRectMake(0, 0, img.size.width, img.size.height)];            
    }

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    [self revealImageInSet:touches];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    [self revealImageInSet:touches];    
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

    [self revealImageInSet:touches];
}

-(void) revealImageInSet:(NSSet*)touches
{
    didStartTouching = YES;

    UITouch *touch = [touches anyObject];

    CGPoint point = [touch locationInView:self];     

    CGRect rect = CGRectMake(point.x-CIRCLE_RADIUS, point.y-CIRCLE_RADIUS, CIRCLE_RADIUS*2, CIRCLE_RADIUS*2);

    [self setNeedsDisplayInRect:rect];

}

【问题讨论】:

    标签: iphone objective-c ios4 uiview core-graphics


    【解决方案1】:

    您不应仅在您触摸的地方显示图像,而应显示从上一个接触点到当前接触点的图像。就像从最后一次触摸到当前触摸划一条线,然后揭示该区域后面的任何内容。这会让它更顺畅。

    第一次触摸时不知道黑色矩形,抱歉。

    【讨论】:

    • 但是,如果我要透露从最后一次触摸到当前触摸的所有内容,就像你说的那样画一条线,我不希望那样。我只想绘制用户触摸屏幕的区域。你说的“在这个区域后面”是什么意思?示例代码会很棒。
    • 您的触摸顺序是连续触摸,对吧?触摸和拖动手势?我的意思是说你应该揭示每个触摸和拖动手势的点之间的线条。因此,如果用户向下拖动,整个区域将完整显示,而不是随机间隔的圆圈。
    • 基本上,我的意思是您应该跟踪您收到的触摸的“路径”,并显示路径后面的图像。现在你的代码只是揭示了接触点。将接触点连接在一起以形成您的路径。当然,在您的触摸和拖动手势结束时重置路径跟踪。
    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多