【发布时间】:2011-09-29 21:59:33
【问题描述】:
我正在尝试实现类似 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];
}
【问题讨论】:
标签: iphone objective-c ios4 uiview core-graphics