UIImageView теряет качество после панорамирования? - PullRequest
0 голосов
/ 13 января 2012

Это очень, очень тонкий эффект, но я замечаю, что мои изображения в UIImageView становятся немного размытыми после перетаскивания.

Я просто использую UIPanGestureRecognizer для перемещения его по экрану и воздействую на альфа при его перемещении (делая его светлее при перетаскивании для эффекта пользовательского интерфейса).

Кто-нибудь знает, почему оно теряет качество изображения и становится немного размытым?

-(void)handlePan:(UIPanGestureRecognizer *)recognizer{
    self.alpha = 0.7;
    CGPoint translation = [recognizer translationInView:self.superview];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.superview];

    //make the sprite slide on release
    if (recognizer.state == UIGestureRecognizerStateEnded){
        self.alpha = 1.0;
        CGPoint velocity = [recognizer velocityInView:self.superview];
        CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
        CGFloat slideMult = magnitude/200;

        float slideFactor = 0.01 *slideMult; //increase for more slide
        CGPoint finalPoint = CGPointMake(recognizer.view.center.x + (velocity.x *slideFactor), recognizer.view.center.y + (velocity.y * slideFactor));

        finalPoint.x = MIN(MAX(finalPoint.x, 0), self.superview.bounds.size.width);
        finalPoint.y = MIN(MAX(finalPoint.y, 0), self.superview.bounds.size.height);

        [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{recognizer.view.center = finalPoint;}
                         completion:nil];

* Редактировать: Я полагаю, что это связано с эффектом скольжения, когда состояние заканчивается.

1 Ответ

3 голосов
/ 13 января 2012

Если ваш imageView.frame.origin имеет дробную долю, например (6.66666, 7.55555), изображение может размыться.Это просто простое выравнивание по пикселям.

В вашем коде панорамирования используйте CGRectIntegral для выравнивания по целым числам, например, так:

panningImageView.frame = CGRectIntegral(panningImageView.frame);

Есть и другие параметры, такие как roundf (), ceilf ()и floorf (), если вам нужно другое поведение округления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...