2015-02-17 2 views
0

У меня есть чувство собственного зрения с точкой зрения изображения:IOS сделать скриншот всего выпуска экрана

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds]; 
[self setBluredImageView:imageView];   
[self addSubview:imageView]; 

- (UIImage *)takeSnapshotOfView:(UIView *)view 
{ 
    CGFloat reductionFactor = 1; 
    UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor)); 
    [view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 

В методе, когда я хочу показать мой взгляд самого по другому мнению, я делаю это:

- (void)showMe; { 


    AppDelegate* app = [AppDelegate shared]; 
    [app.window addSubview:self]; 

    UIImage *image = [self blurWithImageEffects:[self takeSnapshotOfView:app.window]]; 

    [[self bluredImageView] setImage:image]; 

    [UIView animateWithDuration:0.4 animations:^{ 

     [self setAlpha:1.0]; 

    }]; 
} 

So как вы видите, я хочу размыть «графический контекст», основанный на главном окне. В первый раз, когда я представляю свое представление о себе, он отлично работает, но затем что-то вроде размытого изображения умножает друг друга.

Так это изображение, когда я только первый показать мой взгляд:

enter image description here

Когда я представляю мой взгляд несколько раз размытое изображение выглядит следующим образом:

enter image description here

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

Найдены необогаженные методы и категории изображений here.

+0

есть у проверил следующие ответы: http://stackoverflow.com/questions/18956611/programmatically-screenshot-works-bad-on -ios-7 –

+0

, а также те: http://stackoverflow.com/questions/2200736/how-to-take-a-screenshot-programmatically –

ответ

1

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

- (UIImage *)takeSnapshotOfView:(UIView *)view 
{ 
    //Remove the blured image before taking another screenshot. 
    [self bluredImageView] removeFromSuperview]; 
    CGFloat reductionFactor = 1; 

    UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor)); 
    [view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    //Add it back now that the effect is done 
    [self addSubview:[self bluredImageView]; 
    return image; 
} 
+0

Я просто использовал .... afterScreenUpdates: NO]; и, похоже, это работает. –

+0

, но, похоже, ваше предложение также правильное –