Я пытаюсь реализовать вид, похожий на 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];
}