Czy ktoś zna jakieś elementy sterujące, które będą replikować widoki rozmycia w stylu iOS7.
Zakładam, że może istnieć podklasa UIView, która będzie replikować to zachowanie.
Mówię o tego typu widokach, które bardzo mocno rozmywają tło, tak że mają efekt pull z widoku tła.
Odpowiedzi:
Aby to zrobić, możesz zmodyfikować coś takiego jak RWBlurPopover Bin Zhanga . Ten komponent używa mojego GPUImage, aby zastosować rozmycie gaussowskie do komponentów pod nim, ale równie łatwo możesz użyć CIGaussianBlur do tego samego. GPUImage może być jednak szybszy .
Ten komponent polega jednak na tym, że możesz uchwycić widok za tym, który prezentujesz, i może mieć problemy z widokami, które animują tę zawartość. Konieczność przejścia przez grafikę podstawową w celu rasteryzacji widoku tła spowolni działanie, więc prawdopodobnie nie mamy wystarczająco bezpośredniego dostępu, aby móc to zrobić w wydajny sposób dla nakładek na animowane widoki.
W ramach aktualizacji powyższego niedawno przerobiłem rozmycie w GPUImage, aby obsługiwać zmienne promienie, umożliwiając pełną replikację rozmiaru rozmycia w widoku centrum sterowania iOS 7. Na tej podstawie stworzyłem klasę GPUImageiOS7BlurFilter, która zawiera właściwy rozmiar rozmycia i korekcję kolorów, których Apple wydaje się używać tutaj. Oto jak rozmycie obrazu GPU (po prawej) porównuje się do rozmycia wbudowanego (po lewej):
Używam 4X downsampling / upsampling, aby zmniejszyć liczbę pikseli, na które musi działać rozmycie Gaussa, więc iPhone 4S może rozmazać cały ekran w około 30 ms używając tej operacji.
Nadal masz wyzwanie, jak w performatywny sposób wciągnąć treść w to rozmycie z widoków za tym.
źródło
Używam,
FXBlurView
który działa świetnie na iOS5 +https://github.com/nicklockwood/FXBlurView
CocoaPods:
Dodałem go za pomocą:
źródło
FXBlurView
na wierzchu,UIScrollView
miałem również opóźniony wynik. Uważam, że ma to związek ze sposobem dodawania rozmycia. Apple, jeśli się nie mylę, uzyskuje bezpośredni dostęp do GPU, używając własnego rozmycia, czego jako programiści nie możemy zrobić. Dlatego rozwiązanie @cprcrack jest tutaj najlepszym rozwiązaniem.UWAGA: ktoś w komentarzach stwierdził, że Apple odrzuca aplikacje używające tej techniki. Mnie się to NIE przydarzyło, ale tylko po to, by wziąć pod uwagę.
Może cię to zaskoczyć, ale możesz użyć UIToolbar , który już zawiera ten standardowy efekt (tylko iOS 7+). W Twoim widoku viewDidLoad kontrolera:
źródło
viewDidLoad
. - (void) viewDidLoad {[super viewDidLoad]; self.view = [[UIToolbar assign] initWithFrame: CGRectZero]; } W moim przypadku układam widoki programowo (w starym stylu). Głosuję za tym rozwiązaniem, ponieważ UIToolbar dziedziczy UIView, więc zasadniczo nie widzę żadnego problemu w tym rozwiązaniu. Będę testować więcej w miarę rozwoju i testowania tego rozwiązania.Od iOS8 możesz używać UIBlurEffect .
Istnieją dobre przykłady na iOS8Sampler z UIBlurEffect i UIVibrancyEffect .
źródło
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
Najlepszym nowym sposobem na uzyskanie rozmytej nakładki jest użycie nowej funkcji iOS 8 UIVisualEffectView.
UIBlurEffect obsługuje trzy rodzaje stylów. Ciemne, jasne i bardzo lekkie.
źródło
Możesz utworzyć klasę z UIToolBar, która jest podklasą UIView i utworzyć jej wystąpienie w osobnym kontrolerze widoku. To podejście przedstawia półprzezroczysty UIToolBar (podklasę podklasy przez UIView), który zapewnia informacje zwrotne na żywo (w tym przypadku dla AVCaptureSession).
YourUIView.h
YourUIView.m
Po dostosowaniu powyższego UIView przejdź dalej i utwórz klasę, która jest podklasą ViewController. Poniżej utworzyłem klasę, która używa sesji AVCapture. Musisz użyć AVCaptureSession, aby nadpisać wbudowaną konfigurację aparatu Apple. W ten sposób możesz nałożyć przezroczysty UIToolBar z klasy YourUIView .
YourViewController.h
YourViewController.m
źródło