Реализация приложения, похожего на iFog - Выявление внутреннего UIImage - PullRequest
2 голосов
/ 06 июля 2011

Я пытаюсь реализовать вид, похожий на iFog, то есть вид, когда вы можете размазывать палец по экрану, и он покажет, что под ним.

У меня две проблемы с тем, что я делал до сих пор:

  1. Когда я впервые прикасаюсь к экрану, вместо того, чтобы показать, что находится под кружком, он показывает весь черный прямоугольник.Следующее касание экрана работает, как и ожидалось.

  2. Когда я прокручиваю мышь быстро - даже не так быстро на самом деле (все еще тестирую на симуляторе) - кажется, она не справляется хорошоВы можете видеть разрывы между кругами на картинке ниже.Возможно, это связано с улучшением производительности того, что я сделал.

Изображение прикреплено для иллюстрации черного прямоугольника и пробелов.

enter image description here

Мой код: (подкласс 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];

}

1 Ответ

0 голосов
/ 04 августа 2011

Вместо того, чтобы раскрывать изображение только в том месте, где вы получили прикосновения, вы должны раскрыть изображение от вашей последней точки касания до вашей текущей точки касания.Как сделать линию от последнего касания до текущего касания, а затем показать, что находится за этой областью.это сделало бы это более гладким.

Понятия не имею о черном прямоугольнике при первом касании, извините.

...