Die Klasse STSignoViewController ist das Herzstück der libSignoPDFSigner. Diese Klasse wird zur Anzeige und zum Editieren von PDF-Dokumenten verwendet. Der STSignoViewController kann PDF-Dokumente laden und anzeigen. Es kann durch Gesten gezoomt und geblättert werden, Formularfelder können ausgefüllt und Signaturfelder unterschrieben werden. Die Klasse STSignoViewController unterstützt derzeit für das Property modalPresentationStyle nur den Wert UIModalPresentationFullScreen. Sämtliche Eigenschaften und Methoden der Klasse STSignoSigner gehören auch zur Klasse STSignoViewController, nachfolgend sind nur die zusätzlich enthaltenen aufgeführt.
@interface STSignoViewController : UIViewController
Anwendung:
STSignoViewController *signoVC = [[STSignoViewController alloc] init];
signoVC.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:signoVC animated:YES completion:nil];
Oder
STSignoViewController *signoVC = [[STSignoViewController alloc] init];
signoVC.modalPresentationStyle = UIModalPresentationFullScreen;
[self addChildViewController:signoVC];
[self.view addSubview:signoVC.view];
[signoVC didMoveToParentViewController:self];
Eigenschaft signatureCaptureVC
Diese Eigenschaft enthält die Instanz des , der zur Erfassung der Unterschrift verwendet wird. Die Instanz selbst kann nicht gesetzt bzw. geändert werden, es können aber Ihre Eigenschaften und Methoden verwendet werden.
ℹ️ Hinweis: Die Methode sollte nicht verwendet werden, weil sie vom STSignoViewController beim Start der Unterschrifterfassung aufgerufen wird.
@property (readonly, nonatomic, retain) STSignatureCaptureViewController* signatureCaptureVC
|
Eigenschaft |
Bedeutung |
|---|---|
|
STSignatureCaptureViewController* signatureCaptureVC |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
signoVC.signatureCaptureVC.signCaptureDelegate = self;
Eigenschaft toolbarHeight
Diese Eigenschaft enthält die Höhe der Werkzeugleiste und definiert somit auch den oberen Rand der Dokumentanzeige. Die Elemente der Werkzeugleiste werden in jedem Fall immer am unteren Rand der Werkzeugleiste angezeigt, so dass durch diese Eigenschaft verhindert werden kann, dass sich die Elemente mit den Elementen der iOS Statusbar überschneiden. Sie muss gesetzt werden, bevor die loadDocumentFromFile Methode aufgerufen wird.
@property (nonatomic, assign) NSInteger toolbarHeight
|
Eigenschaft |
Bedeutung |
|---|---|
|
NSInteger toolbarHeight |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
signoVC.toolbarHeight = 50;
Eigenschaft showToolbar
Diese Eigenschaft definiert, ob die Werkzeugleiste angezeigt werden soll. Sie muss gesetzt werden, bevor die loadDocumentFromFile Methoden aufgerufen wird.
Die Werkzeugleiste enthält derzeit die folgenden vier Schaltflächen:
-
„Zurück“: Ruft auf.
-
„Unterschreiben“: Springt die Signaturfelder der Reihe nach ab.
-
„Signaturfelder“: Ruft auf und zeigt ggf. einen Dialog mit den Signaturfeldern des Dokuments an.
-
„Speichern“: Ruft auf.
@property (nonatomic, assign) BOOL showToolbar
|
Eigenschaft |
Bedeutung |
|---|---|
|
BOOL showToolbar |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
signoVC.showToolbar = NO;
Eigenschaft enableAutoRotation
Mit dieser Eigenschaft kann das Drehen des Bildschirms gesperrt und entsperrt werden.
@property (nonatomic, assign) BOOL enableAutoRotation
|
Eigenschaft |
Bedeutung |
|---|---|
|
BOOL enableAutoRotation |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
|
Wert |
Bedeutung |
|---|---|
|
YES |
Drehen des Bildschirms wird entsperrt. |
|
NO |
Drehen des Bildschirms wird gesperrt. |
Anwendung:
signoVC.enableAutoRotation = YES;
Eigenschaft showPageNumber
Mit dieser Eigenschaft kann konfiguriert werden, ob die Seitennummer im PDF-Viewer angezeigt wird.
@property (nonatomic, assign) BOOL showPageNumber
|
Eigenschaft |
Bedeutung |
|---|---|
|
BOOL showPageNumber |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
|
Wert |
Bedeutung |
|---|---|
|
YES |
Die Seitennummer wird angezeigt. |
|
NO |
Die Seitennummer wird nicht angezeigt. |
Anwendung:
signoVC.showPageNumber = YES;
Eigenschaft signatureCaptureConfig
Diese Eigenschaft enthält die Instanz des , über deren Eigenschaften der Signaturdialog konfiguriert werden kann.
@property (nonatomic, strong) STSignatureCaptureConfig* signatureCaptureConfig
|
Eigenschaft |
Bedeutung |
|---|---|
|
STSignatureCaptureConfig* signatureCaptureConfig |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
STSignatureCaptureConfig *sigCapConfig =
[[STSignatureCaptureConfig alloc] init];
sigCapConfig.displayText = signatureFieldName;
sigCapConfig.font = [UIFont fontWithName:@"Helvetica" size:24];
sigCapConfig.textColor = [UIColor blackColor];
sigCapConfig.position = CGRectMake(30.0f, 30.0f, 200.0f, 40.0f);
sigCapConfig.signatureColor = [UIColor blueColor];
signoVC.signatureCaptureConfig = sigCapConfig;
Methode setPhotoFieldNames:maxWidth:maxHeight:
Mit dieser Methode können die Namen von Formularfeldern definiert werden, die für die Aufnahme von Fotos verwendet werden sollen. Die so definierten Formularfelder verhalten sich dann nicht wie übliche Formularfelder, sondern sprechen beim Antippen die Kamera des Geräts an, damit der Anwender ein Foto erfassen kann. Das erfasste Foto wird dann an der Position des Formularfeldes sichtbar eingebracht. Der Anwender kann durch ein erneutes Antippen des Feldes das Foto austauschen, solange das Feld nicht auf „read only“ gesetzt worden ist.
-(int)setPhotoFieldsNames:(NSMutableArray*)fieldNames maxWidth:(int)width maxHeight:(int)height
|
Parameter |
Bedeutung |
|
|---|---|---|
|
(NSMutableArray*) fieldNames |
Array mit den Namen von Formularfeldern, die als Fotofeld verwendet werden sollen. ℹ️ Hinweise: Die Formularfelder müssen vom Typ „Text“ sein; es wird nicht überprüft, ob diese Felder in dem Dokument existieren. |
|
|
(int)width |
Maximale Breite des Fotos in Pixeln. |
|
|
(int)height |
Maximale Höhe des Fotos in Pixeln. |
|
|
Rückgabewert |
Bedeutung |
|
|
int |
0 |
Methode wurde erfolgreich ausgeführt. |
|
|
< 0 |
Es ist ein Fehler aufgetreten (s. o.). |
Anwendung:
int ret = [signoVC setPhotoFieldsNames:fieldNames maxWidth:1000 maxHeight:600];
if (ret < 0)
{
// error handling
}
Methode startSignature:
Diese Methode startet das Erfassen von Unterschriften. Diese Funktionalität kann auch durch die „Unterschreiben“-Schaltfläche in der Werkzeugleiste oder durch das Antippen eines Signaturfeldes im Dokument ausgelöst werden.
-(void)startSignature
-(void)startSignature:(NSString*)signatureFieldName
|
Parameter |
Bedeutung |
|---|---|
|
(NSString*) signatureFieldName |
(Optional) Name des Signaturfeldes, das unterschrieben werden soll; wird kein Name übergeben, werden alle Felder in der Reihenfolge abgesprungen, in der sie in das Dokument eingebracht worden sind. |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoVC startSignature:@"customer_signature"];
Methode scrollToFormField:withFocus:
Mit dieser Methode kann das Dokument auf die Höhe eines bestimmten Formularfeldes gescrollt werden.
-(void)scrollToFormField:(STFormFieldInfoDTO*)formField withFocus:(BOOL)focus
|
Parameter |
Bedeutung |
|
|---|---|---|
|
(STFormFieldInfoDTO*) formField |
Das STFormFieldInfoDTO-Objekt, auf dessen Höhe das Dokument scrollen soll. |
|
|
(BOOL)focus |
YES |
Nach dem Scrollen bekommt das Feld den Focus. |
|
|
NO |
Nach dem Scrollen bekommt das Feld kein Focus. |
|
Rückgabewert |
Bedeutung |
|
|
- |
- |
|
Anwendung:
[signoVC scrollToFormField:formField withFocus:focus];
Methode createViewerRect:
Mit dieser Methode kann ein Rechteck auf dem PDF-Viewer angezeigt werden, welches vom Anwender in der Größe und Position verändert werden kann. Zusätzlich zum Rechteck werden zwei Schaltflächen zum Abbrechen und Bestätigen erzeugt. Beim Antippen der Abbrechen-Schaltfläche wird die Methode aufgerufen. Beim Antippen der Bestätigungs-Schaltfläche wird die Methode aufgerufen. Mit Hilfe der Klasse können weitere Eigenschaften des Rechtecks konfiguriert werden. Für weitere Informationen siehe auch die Klasse .
-(int)createViewerRect:(STViewerRectDTO*)viewerRectDTO
|
Parameter |
Bedeutung |
|
|---|---|---|
|
(STViewerRectDTO*) viewerRectDTO |
Das –Objekt |
|
|
Rückgabewert |
Bedeutung |
|
|
int |
> 0 |
Eindeutige ID des erzeugten Rechtecks. |
|
|
< 0 |
Es ist ein Fehler aufgetreten (s. o.). |
Anwendung:
STViewerRectDTO* rectViewerDTO = [STViewerRectDTO alloc] init];
int rectViewId = [signoVC createViewerRect: rectViewerDTO];
Methode finishTextSearch
Mit dieser Methode können die visuellen Hervorhebungen, die nach Ausführung der Methode an allen Fundstellen des Suchtextes angezeigt werden, aus dem PDF-Viewer entfernt werden.
-(void)finishTextSearch
|
Parameter |
Bedeutung |
|---|---|
|
- |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoVC finishTextSearch];
Methode enableTouchEvents:
Mit dieser Methode können alle Touch-Events im PDF-Viewer gesperrt und entsperrt werden.
-(void)enableTouchEvents:(BOOL)enable
|
Parameter |
Bedeutung |
|
|---|---|---|
|
(BOOL) enable |
YES |
Alle Touch Events werden entsperrt. |
|
|
NO |
Alle Touch Events werden gesperrt. |
|
Rückgabewert |
Bedeutung |
|
|
- |
- |
|
Anwendung:
[signoVC enableTouchEvents:YES];
Methode releaseSignoViewController
Mit dieser Methode kann die erzeugte Instanz der -Klasse freigegeben werden. Sie sollte immer aufgerufen werden, wenn eine Instanz nicht mehr benötigt wird.
-(void)releaseSignoViewController
|
Parameter |
Bedeutung |
|---|---|
|
- |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoSigner releaseSignoViewController];
Methode scrollToPage:animationDuration
Mit dieser Methode kann das Dokument auf die Höhe einer bestimmten Seite gescrollt werden.
-(void)scrollToPage:(int)pageNr animationDuration:(double)animationDuration
|
Parameter |
Bedeutung |
|---|---|
|
(int)pageNr |
Die Nummer der Seite, auf deren Höhe das Dokument scrollen soll. |
|
(double) animationDuration |
Ein Zeitintervall, das als Dauer des Scrollens verwendet wird. Übliche Werte liegen zwischen 0.0 und 1.0. |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoVC scrollToPage:3 animationDuration:0.3];
Methode scrollToSearchResult:withHighlightColor:
Diese Methode ermöglicht zwischen den zuvor durch die Methode hervorgehobenen Suchergebnissen zu navigieren.
-(void)scrollToSearchResult()direction withHighlightColor:(UIColor*)highlightColor
|
Parameter |
Bedeutung |
|
|---|---|---|
|
()direction |
|
Scrollt zum nächsten hervorgehobenen Suchergebnis. |
|
|
|
Scrollt zum vorherigen hervorgehobenen Suchergebnis. |
|
(UIColor*)highlightColor |
Hebt das aktuell aktive Suchergebnis visuell mit einer abweichenden Farbe im Vergleich zu anderen Treffern hervor. Der Parameter sollte sinnvollerweise identisch mit dem Parameter primaryMatchColor in der Methode sein, um eine einheitliche Darstellung zu gewährleisten. |
|
|
Rückgabewert |
Bedeutung |
|
|
- |
- |
|
Anwendung:
[signoVC scrollToSearchResult:SearchDirectionNext withHighlightColor:[UIColor redColor]];
Methode startNotesModeWithConfig:
Diese Methode ermöglicht die Aktivierung des Notizen-Modus, in dem handschriftliche Notizen zu einem PDF-Dokument hinzugefügt werden können. Während der Notizen-Modus aktiv ist, werden alle Aktionen deaktiviert, die Änderungen am PDF-Viewer bewirken könnten. Der Notizen-Modus funktioniert nicht mit PDF/A-1b-Dokumenten, weil diese keine Transparenz unterstützen. Mithilfe der Methoden und lässt sich überprüfen, ob der Notizen-Modus erfolgreich gestartet wurde oder aufgrund bestimmter Bedingungen fehlgeschlagen ist.
-(void)startNotesModeWithConfig:(STNotesConfig*)notesConfig
|
Parameter |
Bedeutung |
|---|---|
|
(STNotesConfig*) notesConfig |
Instanz der definiert verschiedene Eigenschaften des Notizen-Modus, wie z. B. die Linienfarbe und die Linienstärke. |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
STNotesConfig* notesConfig = [[STNotesConfig alloc] init];
notesConfig.strokeWidth = 3.0;
notesConfig.strokeColor = [UIColor redColor];
[signoVC startModeWithConfig: notesConfig];
Methode cancelNotesMode
Diese Methode beendet den aktuell aktiven Notizen-Modus und stellt den ursprünglichen Anzeigemodus des PDF-Viewers wieder her. Alle nicht gespeicherten Notizen gehen verloren. Diese Methode hat keine Auswirkungen, wenn der Notizen-Modus nicht aktiv ist.
-(void)cancelNotesMode
|
Parameter |
Bedeutung |
|---|---|
|
- |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoVC cancelNotesMode];
Methode saveAndFinishNotesMode
Diese Methode speichert alle während der aktuellen Notizen-Sitzung vorgenommenen Änderungen und beendet anschließend den Notizen-Modus. Nach dem erfolgreichen Speichern wechselt der Viewer zurück in den Standardmodus. Über die mitgegebene Callback-Schnittstelle kann das Ergebnis des Speichervorgangs verarbeitet werden. Mithilfe der Methoden und lässt sich überprüfen, ob die Notizen erfolgreich gespeichert wurden oder ob der Speichervorgang fehlgeschlagen ist.
-(void)saveAndFinishNotesMode
|
Parameter |
Bedeutung |
|---|---|
|
- |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoVC saveAndFinishNotesMode];
Methode changeNotesConfig:
Diese Methode ermöglicht die Aktualisierung der Notizen-Konfiguration während des aktiven Notizen-Modus. Änderungen werden sofort übernommen und gelten für alle nachfolgenden Notizen innerhalb der aktuellen Sitzung. Diese Methode kann nur aufgerufen werden, wenn der Notizen-Modus aktiv ist. Bereits erstellte Notizen bleiben unverändert, die Änderungen wirken sich nur auf zukünftige Notizen aus.
-(void)changeNotesConfig:(STNotesConfig*)notesConfig
|
Parameter |
Bedeutung |
|---|---|
|
(STNotesConfig*) notesConfig |
Eine aktualisierte Instanz von , die die neuen Werte für Linienfarbe und Linienstärke enthält. |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
STNotesConfig* notesConfig = [[STNotesConfig alloc] init];
notesConfig.strokeWidth = 3.0;
notesConfig.strokeColor = [UIColor greenColor];
[signoVC changeNotesConfig:notesConfig];
Methode undoNote
Diese Methode entfernt die zuletzt erstellte Notiz während der aktuellen Notizen-Sitzung. Sie ermöglicht es dem Benutzer, die letzte Aktion rückgängig zu machen, um Fehler zu korrigieren oder Anpassungen vorzunehmen. Diese Methode ist nur im aktiven Notizen-Modus verfügbar und hat keine Auswirkung, wenn in der aktuellen Sitzung keine Notizen erstellt worden sind.
-(void)undoNote
|
Parameter |
Bedeutung |
|---|---|
|
- |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoVC undoNote];
Methode redoNote
Diese Methode stellt die zuletzt rückgängig gemachte Notiz im Notizen-Modus wieder her. Sie dient dazu, eine zuvor entfernte Notiz erneut anzuwenden und macht die Aktion von rückgängig. Diese Methode ist nur im aktiven Notizen-Modus verfügbar und hat keine Auswirkung, wenn keine Notiz rückgängig gemacht worden ist.
-(void)redoNote
|
Parameter |
Bedeutung |
|---|---|
|
- |
- |
|
Rückgabewert |
Bedeutung |
|
- |
- |
Anwendung:
[signoVC redoNote];
Methoden currentLockedOrientationMask
Liefert die aktuell gültige Orientierungsmaske.
Signatur
- (UIInterfaceOrientationMask)currentLockedOrientationMask;
Rückgabewert
|
Typ |
Beschreibung |
|---|---|
|
|
Die aktuell gültige Orientierungsmaske. |
Beschreibung
Bei aktivem Lock wird ausschließlich die zum Lock-Zeitpunkt aktive Orientierung zurückgegeben, sodass die App diese beibehält. Ohne Lock wird die Standardmaske (AllButUpsideDown) verwendet.
Beispiel (Swift)
let mask = signoViewController.currentLockedOrientationMask()
syncOrientationLockToApp
Synchronisiert den aktuellen Orientierungszustand mit der App.
Signatur
- (void)syncOrientationLockToApp;
Rückgabewert
Kein Rückgabewert.
Beschreibung
Setzt die globale Orientierungsmaske und erzwingt eine sofortige Aktualisierung im System (inklusive UIWindowScene Geometry Update ab iOS 16). Dadurch wird die App bei aktivem Lock in der aktuellen Orientierung gehalten bzw. bei deaktiviertem Lock wieder freigegeben.
Beispiel (Swift)
signoViewController.syncOrientationLockToApp()
-
ℹ️ Ab iOS 16 erfolgt die Aktualisierung über
UIWindowScene.requestGeometryUpdate(_:). -
Unter älteren iOS-Versionen wird
UIViewController.attemptRotationToDeviceOrientation()verwendet.
Erforderliche Anpassungen in der App
Damit die Orientierungssteuerung wirksam wird, sind in der einbindenden App die folgenden Ergänzungen erforderlich.
1. UIView-Extension (Synchronisation mit der App)
Synchronisiert den Orientierungszustand des Signatur-Controllers mit der gesamten App. Setzt die globale Orientierungsmaske und erzwingt eine sofortige Aktualisierung im System (inklusive Geometry Update ab iOS 16). Bei aktivem Lock bleibt die App in der aktuellen Orientierung, bei deaktiviertem Lock wird das normale Rotationsverhalten wiederhergestellt.
import UIKit
@objc extension STSignoViewController {
@objc func syncOrientationLockToApp() {
let mask = currentLockedOrientationMask()
STSignoVCOrientationLock.shared.lockedMask = mask
STSignoVCOrientationLock.shared.isLocked = (mask != .allButUpsideDown)
if #available(iOS 16.0, *) {
if let windowScene = view.window?.windowScene {
let preferences = UIWindowScene.GeometryPreferences.iOS(
interfaceOrientations: mask
)
try? windowScene.requestGeometryUpdate(preferences)
}
setNeedsUpdateOfSupportedInterfaceOrientations()
navigationController?.setNeedsUpdateOfSupportedInterfaceOrientations()
} else {
UIViewController.attemptRotationToDeviceOrientation()
}
}
}
2. Globale Zustandsklasse
Globaler Zustand für die Orientierungssteuerung der App. Diese Klasse dient als zentrale Quelle für den aktuellen Orientation-Lock:
-
isLockedgibt an, ob die Orientierung eingefroren ist. -
lockedMaskdefiniert die erlaubte Orientierung.
Sie wird vom AppDelegate abgefragt, um die unterstützten Orientierungen der gesamten App dynamisch zu steuern.
import UIKit
final class STSignoVCOrientationLock {
static let shared = STSignoVCOrientationLock()
private init() {}
var isLocked: Bool = false
var lockedMask: UIInterfaceOrientationMask = .allButUpsideDown
}
3. AppDelegate-Erweiterung
Liefert die aktuell erlaubten Orientierungen der App. Bei aktivem Orientation-Lock wird ausschließlich die gespeicherte Orientierungsmaske zurückgegeben, sodass die App in dieser Orientierung bleibt. Ohne Lock werden die Standard-Orientierungen (allButUpsideDown) verwendet.
func application(
_ application: UIApplication,
supportedInterfaceOrientationsFor window: UIWindow?
) -> UIInterfaceOrientationMask {
if STSignoVCOrientationLock.shared.isLocked {
return STSignoVCOrientationLock.shared.lockedMask
}
return .allButUpsideDown
}
⚠️ ⚠️ Wichtig: In SwiftUI-Apps muss der folgende Eintrag in der Info.plist gesetzt sein, da andernfalls die Orientierungssteuerung auf dem iPad nicht funktioniert:
<key>UIRequiresFullScreen</key>
<true/>