2016-11-07 45 views
8

Niedawno natknąłem się na całkiem nową wtyczkę cordova o nazwie cordova-plugin-qrscanner (https://github.com/bitpay/cordova-plugin-qrscanner). Używam już wcześniej innych skanerów QR, ale te po prostu nakładają się na jakiś rodzimy interfejs kamery, dopóki QR nie zostanie zeskanowany, a następnie wróci do aplikacji.Najlepszy sposób, aby aplikacja ionic2 była całkowicie przezroczysta?

Jednak podejście do tej wtyczki jest nieco inne. Kamera jest pokazywana "za" Twoją aplikacją i musisz zrobić wszystko przezroczyście, aby ją zobaczyć.

Jest to bardzo interesujące, ponieważ można wtedy łatwo dodać niestandardowe nakładki za pomocą HTML i CSS. Jednak nie jestem do końca pewien, jakie jest najlepsze podejście.

Po dodaniu wtyczki i po prostu wywołaniu QRScanner.scan(displayContents); nic nie widać, ale skaner działa już w tle. Następnie rekurencyjnie usunąłem z aplikacji wszelkie style (patrz simplest way to remove all the styles in a page) i ustawiłem kolor tła na przezroczysty, aby zobaczyć, czy zadziałało. Tak, ale oczywiście nadal widziałem tekst, który był wyświetlany wcześniej.

Sądzę, że mógłbym utworzyć i wypchnąć nową stronę z moją nakładką, ustawić kolor tła jako przezroczysty, a następnie przejść wstecz po zeskanowaniu kodu. Ale czuje się naprawdę beznadziejnie.

Czy ktoś ma lepsze rozwiązanie?
Czy istnieje na przykład sposób "zamiany" całej widocznej części aplikacji z nakładką i przywrócenia stanu po zeskanowaniu kodu?

Dzięki za pomoc.

EDIT:

To nie to samo, wtyczki, ale ten artykuł dotyczy moje pytanie.

http://www.joshmorony.com/ionic-go-create-a-pokemon-go-style-interface-in-ionic-2/

Stosowanie styli css działa, ale znowu, reszta aplikacji nie jest użyteczny wtedy.

+0

Skąd wiesz, że plugin działa? Ponieważ nic nie widzisz, wtyczka może po prostu nie działać. – vrijdenker

+0

Tak jak powiedziałem, jeśli sprawię, że wszystkie elementy będą przezroczyste rekursywnie, to działa. Ale oczywiście nie może to być rozwiązaniem, ponieważ pozostałe części aplikacji są bezużyteczne. –

Odpowiedz

0

Nie uczyniłbym aplikacji przejrzystą, ponieważ nie widzę sensu tego. Zamiast tego po prostu pokazywałbyś zawartość kamery w dziale na twojej stronie i warstwowałeś inne elementy HTML, używając wyższego indeksu Z niż element zawierający obraz z kamery.

+0

Jak dodać zawartość kamery do div? To byłoby jeszcze lepsze rozwiązanie, ale nie wiem, czy/jak to jest możliwe. –

+0

Czy byłeś w stanie to rozgryźć @AndreasGassmann? –

+0

Jedynym sposobem na sprawdzenie, czy działa, jest użycie WKWebView na iOS. Możesz rzucić okiem na kod źródłowy przykładu tutaj: https://github.com/airgap-it/airgap-mobile-broadcaster –

0

As @vrijdenker powiedział, że powinieneś wyświetlać zawartość kamery na odpowiednim poziomie i nie dziwacznie włamać się do CSS.

Aby to zrobić można zdalnego debugowania aplikacji, aby zlokalizować kontener kamery i zastosować trochę CSS na nim zmodyfikować z-index/Wyświetl/itp

zdalnego debugowania na Androida:

https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

zdalnego debugowania na iOS:

https://developer.apple.com/library/content/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html

można to zrobić na prawdziwym Devi ce lub na symulatorze

+0

Jak już wspomniałem, wątpię, czy to zadziała. Z dokumentacji wtyczki wynika, że ​​podgląd kamery jest wyświetlany poza kontekstem przeglądania sieci. 'Podgląd natywnego aparatu QRScanner jest renderowany za widokiem sieciowym aplikacji Cordova'. Nie sądzę, że możesz uzyskać do niego dostęp z poziomu widoku internetowego. –

+0

OK, a następnie zastosuj określoną klasę CSS na swoim kontenerze po uruchomieniu wtyczki, zgodnie z opisem w dokumencie. Użyj dyrektywy 'ngClass' i zastosuj' kracity: 0' do swojej konkretnej klasy –

1

@Andreas Miałem problem kilka tygodni temu.Oto jak to naprawiłem:

1) Najpierw utwórz klasę o nazwie lowOpacity na swoim temacie/variables.scss, musi być globalna, jeśli utworzysz ją w scss strony, to dodanie jej dynamicznie nie będzie praca:

.lowOpacity { 
    opacity: 0; 
} 

2) Kiedy pokazują qrScanner, należy zastosować klasę do elementu jon-app i opcjonalnie zarejestrować działanie BackButton:

  this.qrScanner.show().then(()=>{ 
       let unregister = this.platform.registerBackButtonAction(()=>{ 
        this.closeQrScanner(); 
        unregister(); 
       }); 
       window.document.querySelector('ion-app').classList.add('lowOpacity'); 
      }); 

3) Pamiętaj, aby usunąć klasę po skanowaniu qrScanner coś ot zostało zamknięte:

closeQrScanner() { 
    this.qrScanner.hide().then(()=>{ 
     window.document.querySelector('ion-app').classList.remove('lowOpacity'); 
    }); // hide camera preview 
} 

ngOnDestroy() { 
    this.closeQrScanner(); 
} 

Nadzieja pomaga