Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 实现类似iFog的应用程序-显示内部UIImage_Iphone_Objective C_Ios4_Uiview_Core Graphics - Fatal编程技术网

Iphone 实现类似iFog的应用程序-显示内部UIImage

Iphone 实现类似iFog的应用程序-显示内部UIImage,iphone,objective-c,ios4,uiview,core-graphics,Iphone,Objective C,Ios4,Uiview,Core Graphics,我正在尝试实现类似iFog的视图,这意味着当你可以像手指一样在屏幕上涂抹时,它将显示下面的内容 到目前为止,我所做的有两个问题: 当我第一次触摸屏幕时,它显示的不是圆圈中下方的内容,而是整个黑色矩形。屏幕上的下一次触摸按预期工作 当我快速滚动鼠标时——甚至没有那么快——实际上仍然在模拟器上测试——它似乎处理得不好,正如下图中圆圈之间的间隙所示。 也许是为了提高我的表现 随附图片,用于说明黑色矩形和间隙 我的代码:UIView子类 基本上,我先显示第一张图片,然后用手指在屏幕上移动,显示第二张图片

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

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

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

当我快速滚动鼠标时——甚至没有那么快——实际上仍然在模拟器上测试——它似乎处理得不好,正如下图中圆圈之间的间隙所示。 也许是为了提高我的表现

随附图片,用于说明黑色矩形和间隙

我的代码: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];

}

不要只在接触的地方显示图像,而应该显示从上一个接触点到当前接触点的图像。就像在最后一次触摸到当前触摸之间画一条线,然后显示该区域后面的内容。那会让事情变得更顺利


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

不要只在触摸的地方显示图像,而应该显示从上一个触摸点到当前触摸点的图像。就像在最后一次触摸到当前触摸之间画一条线,然后显示该区域后面的内容。那会让事情变得更顺利


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

但是如果我像你所说的那样,透露从最后一次触摸到当前触摸的所有内容,我不希望这样。我只想画出用户在屏幕上触摸的区域。你说在这片区域后面是什么意思?示例代码将非常棒。您的触摸顺序是连续触摸,对吗?一个触摸拖动的手势?我的意思是说,你应该显示每个触摸和拖动动作点之间的线条。因此,如果用户向下拖动,整个区域将全部显示,而不是以随机间隔的圆圈显示。基本上,我的意思是你应该跟踪你正在接收的触摸的路径,并显示路径后面的图像。现在你的代码只是揭示了接触点。将接触点连接在一起,形成您的路径。当然,当你的触摸和拖动手势结束时,重置路径跟踪。但是如果我要显示从最后一次触摸到当前触摸的所有内容,就像你说的那样画一条线,我不希望这样。我只想画出用户在屏幕上触摸的区域。你说在这片区域后面是什么意思?示例代码将非常棒。您的触摸顺序是连续触摸,对吗?一个触摸拖动的手势?我的意思是说,你应该显示每个触摸和拖动动作点之间的线条。因此,如果用户向下拖动,整个区域将全部显示,而不是以随机间隔的圆圈显示。基本上,我的意思是你应该跟踪你正在接收的触摸的路径,并显示路径后面的图像。现在你的代码只是揭示了接触点。将接触点连接在一起,形成您的路径。当然,在触摸和拖动手势结束时重置路径跟踪。