2015-10-25 6 views
0

Я добавил размытие в моем приложении. Если я запустил приложение в Simulator (iPhone 6, iOS 8.4), все будет хорошо работать, и отобразится размытие. Если я запустил приложение на устройстве (iPad 3-го поколения, iOS 8.4), отображается размытие, но на нем не отображается размытый фон, вместо него отображается серый фон. Не знаю, почему. Вы знаете, почему и как его решить?Blur View работает в симуляторе, но не на устройстве

+0

Вы попробовали симулятор iPad? Работает ли он так, как ожидалось? – Acoop

+0

Вы уверены, что добавили свои подвидности размытия в размытые объекты contentView? если вы не добавляете subviews здесь, я считаю, что поведение не определено. Мне нужно будет увидеть скриншоты, чтобы лучше понять, что происходит. –

+0

Нет, он также не работает в iPad Simulator. Не знаю, что делать. Пример (серая часть - это размытие): https://www.dropbox.com/s/e77uinulbqjmu81/Bildschirmfoto%202015-10-25%20um%2023.31.37.png?dl=0 – user5473123

ответ

0

Какой код вы используете?

func BlurEffect(){ 
    let extraLightBlur = UIBlurEffect(style: .Dark) 
      let extraLightBlurView = UIVisualEffectView(effect: extraLightBlur) 
      self.addSubview(extraLightBlurView) 

      //let blurAreaAmount = CGRectMake(0, 0, frame.size.width, frame.size.height) 
      extraLightBlurView.frame = CGRectMake(0, 0, frame.size.width, frame.size.height) 
      let extraLightVibrancyView = vibrancyEffectView(forBlurEffectView: extraLightBlurView) 
      extraLightBlurView.contentView.addSubview(extraLightVibrancyView) 
     } 

     private func vibrancyEffectView(forBlurEffectView blurEffectView:UIVisualEffectView) -> UIVisualEffectView { 
      let vibrancy = UIVibrancyEffect(forBlurEffect: blurEffectView.effect as! UIBlurEffect) 
      let vibrancyView = UIVisualEffectView(effect: vibrancy) 
      vibrancyView.frame = blurEffectView.frame 
      //vibrancyView.autoresizingMask = .FlexibleWidth | .FlexibleHeight 
      return vibrancyView 
     } 
+0

Да, я использую эту часть код, но стиль 'Light' не' Dark'. – user5473123

+1

Я проверил этот код с iPhone 6+ (iOS 8.4). Хорошо работает. –

+0

Да, но попробуйте на iPad 2 iOS 8.4. Это не сработает. – user5473123

0

Я столкнулся с этой проблемой и запустил свой собственный эффект размытия, используя Core Image, чтобы создать категорию UIView. Он работает на очень старом iPad mini и iPod touch.

Заголовок

// 
// UIView+CIFilters.h 
// 

#import <UIKit/UIKit.h> 
@interface UIView (CIFilters) 
- (UIImageView *)blurredBackgroundViewWithRadius:(CGFloat)radius; 
@end 

Категория

#import "UIView+CIFilters.h" 

@implementation UIView (CIFilters) 

- (UIImageView *)blurredBackgroundViewWithRadius:(CGFloat)radius { 

    UIView *snapshot = self; 
    // Get a CIImage from the view's contents 
    UIGraphicsBeginImageContextWithOptions(snapshot.bounds.size, snapshot.opaque, 0); 
    [snapshot drawViewHierarchyInRect:snapshot.bounds afterScreenUpdates:YES]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    CIImage *snapshotImage = [CIImage imageWithCGImage:image.CGImage]; 

    // Create a filter. 
    // This has to be applied first so that the edges of the CIGaussianBlur reach to the edge of the screen 
    // See the Core Image Filter Reference 
    CIFilter *clampFilter = [CIFilter filterWithName:@"CIAffineClamp" 
           withInputParameters:@{ 
                 kCIInputImageKey: snapshotImage 
                 }]; 

    CIImage *clampImage = [clampFilter valueForKey:kCIOutputImageKey]; 

    CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur" 
           withInputParameters:@{ 
                 kCIInputImageKey: clampImage, 
                 kCIInputRadiusKey:@(radius) 
                 } 
          ]; 
    CIImage *blurredCIImage = [blurFilter valueForKey: kCIOutputImageKey]; 

    CIContext *context = [CIContext contextWithOptions:nil]; 
    CGImageRef cgImage = [context createCGImage:blurredCIImage fromRect:[snapshotImage extent]]; 

    UIImage *blurredImage = [UIImage imageWithCGImage:cgImage]; 
    UIImageView *blurredSnaphotview = [[UIImageView alloc] initWithImage:blurredImage]; 

    return blurredSnaphotview; 
} 

@end 

Например

UIImageView *blurredSnapshot = [self.view blurredBackgroundViewWithRadius:10.0]; 

сделает размытый снимок всего вида иерархии self.view, где самость ток просмотрите контроллер. Чем больше радиус, тем более размытым изображение. Подставьте это представление для UIVisualEffectView.

Обязательно добавьте CoreImage в рамки проекта.

Смежные вопросы