Alguém conhece algum controle que irá replicar as visualizações desfocadas no estilo iOS7?
Estou assumindo que pode haver algum tipo de subclasse UIView que irá replicar o comportamento.
Estou falando sobre essas visualizações de tipo que desfocam o fundo de forma extremamente espessa, de modo que têm efeitos de atração da visualização de fundo.
ios
objective-c
core-graphics
endy
fonte
fonte
Respostas:
Você pode ser capaz de modificar algo como RWBlurPopover de Bin Zhang para fazer isso. Esse componente usa meu GPUImage para aplicar um desfoque Gaussiano aos componentes abaixo dele, mas você poderia facilmente usar um CIGaussianBlur para o mesmo. GPUImage pode ser um fio de cabelo mais rápido .
Esse componente depende de você ser capaz de capturar a visualização por trás do que você está apresentando, no entanto, e pode ter problemas com visualizações que são animadas por trás desse conteúdo. A necessidade de fazer uma viagem através do Core Graphics para rasterizar a visualização do plano de fundo tornará as coisas mais lentas, portanto, provavelmente não temos acesso direto o suficiente para ser capaz de fazer isso com desempenho para sobreposições em visualizações animadas.
Como uma atualização para o acima, eu recentemente retrabalhei os desfoque no GPUImage para oferecer suporte a raios variáveis, permitindo a replicação completa do tamanho do desfoque na visão central de controle do iOS 7. A partir disso, criei a classe GPUImageiOS7BlurFilter que encapsula o tamanho de desfoque adequado e a correção de cor que a Apple parece estar usando aqui. É assim que o desfoque do GPUImage (à direita) se compara ao desfoque integrado (à esquerda):
Eu uso um downsampling / upsampling 4X para reduzir o número de pixels sobre o qual o desfoque gaussiano tem que operar, então um iPhone 4S pode desfocar a tela inteira em cerca de 30 ms usando esta operação.
Você ainda tem o desafio de como colocar o conteúdo neste borrão a partir das visualizações por trás deste de maneira eficiente.
fonte
Eu estou usando
FXBlurView
o que funciona muito bem em iOS5 +https://github.com/nicklockwood/FXBlurView
CocoaPods:
Eu adicionei usando:
fonte
FXBlurView
em cima de umUIScrollView
, também obtive um resultado lento. Acredito que isso tenha a ver com a forma como o desfoque é adicionado. A Apple está, se não me engano, acessando diretamente a GPU ao usar seu próprio desfoque, o que não podemos fazer como desenvolvedores. Portanto, a solução @cprcrack é realmente a melhor solução aqui.AVISO: alguém nos comentários afirmou que a Apple rejeita aplicativos que usam essa técnica. Isso NÃO aconteceu comigo, mas apenas para sua consideração.
Isso pode surpreendê-lo, mas você pode usar um UIToolbar , que já inclui esse efeito padrão (apenas iOS 7 ou 7). Na visualização do viewDidLoad do controlador:
fonte
viewDidLoad
assim. - (vazio) viewDidLoad {[super viewDidLoad]; self.view = [[UIToolbar alloc] initWithFrame: CGRectZero]; } No meu caso, eu faço o layout de minhas visualizações de maneira programática (estilo antigo). Eu votei positivamente nesta solução porque UIToolbar herda UIView, então, fundamentalmente, não vejo nenhum problema nesta solução. Vou testar mais à medida que vou desenvolvendo e testando essa solução.Desde iOS8 você pode usar UIBlurEffect .
Existem bons exemplos no iOS8Sampler com UIBlurEffect e UIVibrancyEffect .
fonte
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
A melhor nova maneira de obter uma sobreposição manchada é usar o novo recurso UIVisualEffectView do iOS 8.
O UIBlurEffect oferece suporte a três tipos de estilo. Dark, Light e ExtraLight.
fonte
Você pode criar uma classe com um UIToolBar que é uma subclasse de UIView e instanciá-lo em um controlador de visualização separado. Essa abordagem demonstra um UIToolBar translúcido (subclasse de UIView) que fornece feedback ao vivo (neste caso, para uma AVCaptureSession).
YourUIView.h
YourUIView.m
Uma vez que o UIView acima tenha sido personalizado, vá em frente e crie uma classe que é uma subclasse de um ViewController. Abaixo, criei uma classe que está usando uma sessão AVCapture. Você deve usar AVCaptureSession para substituir a configuração de câmera embutida da apple. Assim, você pode sobrepor o UIToolBar translúcido da classe YourUIView .
YourViewController.h
YourViewController.m
fonte