UIView Оттенки серого, проблемы с анимацией и производительностью - PullRequest
0 голосов
/ 23 ноября 2011

Я занимаюсь разработкой приложения и внедряю приложение для управления заказами некоторых заказов клиента. В этом представлении я реализовал меню в стиле facebook (новое, которое появляется при смещении всего окна вправо), и я добавил эффект серой шкалы к основному виду, когда он смещен вправо. Я достиг этого, создав UIImage текущего экрана и добавив его поверх реального вида и анимировав его альфа от 1 до 0 Вот код, который я использовал для

-(void)toggleMenu {
    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    if (![menu isOpened]){
        UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        UIImage *blackAndWhiteImage = [UIImage getBlackAndWhiteVersionOfImage:viewImage];
        overlayImage = [[UIImageView alloc]initWithImage:blackAndWhiteImage];
        overlayImage.alpha = 0.1;
        overlayImage.userInteractionEnabled=NO;
        [self.view addSubview:overlayImage];
    }

    [UIView animateWithDuration:0.3 animations:^{
        CGRect newRect = [self tabBarController].view.frame;
        if (![menu isOpened]){
            newRect.origin.x += 150;
            [menu setOpened:YES];
            overlayImage.alpha = 1.0;
        } else {
            newRect.origin.x -= 150;
            [menu setOpened:NO];
            overlayImage.alpha = 0;
        }
        [self tabBarController].view.frame = newRect;

    } completion:^(BOOL finished){
        if(![menu isOpened]){
            [overlayImage removeFromSuperview];
            overlayImage = nil;
        }
    }];
}

Проблема в том, что у меня проблемы с выступлениями во время анимации (мало с iPhone 4, я пробую 3gs в следующие часы ...)

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

+ (UIImage *)getBlackAndWhiteVersionOfImage:(UIImage *)anImage {
UIImage *newImage;

if (anImage) {
    CGColorSpaceRef colorSapce = CGColorSpaceCreateDeviceGray();
    CGContextRef context = CGBitmapContextCreate(nil, anImage.size.width * anImage.scale, anImage.size.height * anImage.scale, 8, anImage.size.width * anImage.scale, colorSapce, kCGImageAlphaNone);
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetShouldAntialias(context, NO);
    CGContextDrawImage(context, CGRectMake(0, 0, anImage.size.width, anImage.size.height), [anImage CGImage]);

    CGImageRef bwImage = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSapce);

    UIImage *resultImage = [UIImage imageWithCGImage:bwImage];
    CGImageRelease(bwImage);

    UIGraphicsBeginImageContextWithOptions(anImage.size, NO, anImage.scale);
    [resultImage drawInRect:CGRectMake(0.0, 0.0, anImage.size.width, anImage.size.height)];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

return newImage;

}

1 Ответ

1 голос
/ 23 ноября 2011

Создание изображения на экране стоит дорого. Мне не совсем ясно, какой эффект вы хотите, но вместо этого я бы наложил другой вид или анимировал бы движение основного вида.

Например, вы можете наложить UIView с черным фоном, но с альфа-каналом 0,1, чтобы затемнить область.

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