UIKit (Cocoa Touch) Framework für ios Apps. Objective C. Model View Controller Pattern



Ähnliche Dokumente
Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

Praktikum ios-entwicklung im Sommersemester 2015 Übungsblatt 3

Zählen von Objekten einer bestimmten Klasse

Lehrer: Einschreibemethoden

Einführungskurs MOODLE Themen:

Password Depot für ios

Kontakte Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Installations Guide für YAJSW und DTLDAP

Vorgehensweise bei Lastschriftverfahren

Graphic Coding. Klausur. 9. Februar Kurs A

Der neue persönliche Bereich/die CommSy-Leiste

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

3a Open BIM Workflow - Import und Weiterbearbeitung

AutoCAD Dienstprogramm zur Lizenzübertragung

Beschreibung der Einstellungen zum Drucken aus TRIC DB mit BricsCad ab Version V5

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

PDF-Dateien erstellen mit edocprinter PDF Pro

)XQNWLRQVWDVWH8PEXFKHQ

Norman Security Portal - Quickstart Guide

ROFIN App Benutzerhandbuch. Version 1.0

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

QTrade GmbH Landshuter Allee München Seite 1

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Anleitung zur Nutzung der OFML Daten von Cascando in pcon.planner

Anbindung des Onyx Editors an das Lernmanagementsystem OLAT Anwendungsdokumentation

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Internet online Update (Mozilla Firefox)

iphone- und ipad-praxis: Kalender optimal synchronisieren

Wichtige Information zur Verwendung von CS-TING Version 9 für Microsoft Word 2000 (und höher)

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Perspektiven: Spiele in ios

HOSTED EXCHANGE MAIL FÜR MAC

AK Medientechnologien 05 Delegation

Eine Anwendung mit InstantRails 1.7

Navigation. Drucken Klicken Sie auf ein Symbol, um nähere Informationen zu erhalten. Papierhandhabung Anzeigen der Online-Informationen

So gehts Schritt-für-Schritt-Anleitung

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Regiosystem So geht s! I. Social-Media-Icons neu verlinken 3. II. Newsbeiträge erstellen 4. III. Termin erstellen 7. IV. Videos aktualisieren 7

Enigmail Konfiguration

Ich möchte meine Beitragsnachweise nach dem vereinfachten Schätzverfahren erstellen.

Biogena IMK. Individuelle Mikronährstoff Komponenten. Benutzerhandbuch. Natürlich so individuell wie Ihr Patient

1. Einführung. 2. Alternativen zu eigenen Auswertungen. 3. Erstellen eigener Tabellen-Auswertungen

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Arbeiten mit UMLed und Delphi

Ihre Lizenz ändern. Stand 01/2015

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

MAILEN FÜR DAS LEBEN 1000plus Signaturen einbinden

Handbuch ECDL 2003 Basic Modul 5: Datenbank Access starten und neue Datenbank anlegen

Testplan. Hochschule Luzern Technik & Architektur. Software Komponenten FS13. Gruppe 03 Horw,

Leica 3D Disto Veranda und Wintergarten

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Starten sie WordPad über das Startmenü von Windows. WordPad finden Sie im Ordner Zubehör.

Objektorientierte Programmierung

GPS Garmin MapSource - Track erstellen und nutzen

Anleitung zur Installation des EPSON TM-m30 WLAN Moduls

Menü auf zwei Module verteilt (Joomla 3.4.0)

inviu routes Installation und Erstellung einer ENAiKOON id

Internationales Altkatholisches Laienforum

Der/die KursleiterIn kann sowohl die Einträge als auch die geposteten Kommentare in allen drei Blog- Typen bearbeiten, kommentieren und löschen.

Um die Rücklagen ordnungsgemäß zu verbuchen, ist es wichtig, Schritt-für-Schritt vorzugehen:

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Print2CAD 2017, 8th Generation. Netzwerkversionen

Schritt für Schritt. Anmeldung

CodeSaver. Vorwort. Seite 1 von 6

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Word 2010 Schnellbausteine

Funktionsbeschreibung Website-Generator

Übung Bilder verschmelzen

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

GSD-Radionik iradionics Android-App

ecaros2 - Accountmanager

Medea3 Print-Client (m3_print)

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Leitfaden zu VR-Profi cash

Mastermind. Testplan. Hochschule Luzern Technik & Architektur. Programmieren 2 FS12. Gruppe 10

Anleitung zur Webservice Entwicklung unter Eclipse

2. Im Admin Bereich drücken Sie bitte auf den roten Button Webseite bearbeiten, sodass Sie in den Bearbeitungsbereich Ihrer Homepage gelangen.

Teaser-Bilder erstellen mit GIMP. Bildbearbeitung mit GIMP 1

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Step by Step-Anleitung Version 1.00 vom 03. März 2009 Christian Schnettelker,

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

Erstellen eines Wordpress-Blogs

StudyDeal Accounts auf

Dokumentenverwaltung im Internet

C A L D E R A G R A P H I C S. Wie geht das? Einrichten automatischer Druckprozesse

LimeSurvey -Anbindung

Workflows verwalten. Tipps & Tricks

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

Stapelverarbeitung Konvertieren von RAW-Bildern JPEG-Format

Nutzung der Onleihe Schritt für Schritt

Anleitung. Lesezugriff auf die App CHARLY Termine unter Android Stand:

Sobald Sie in Moodle einen Textbeitrag verfassen möchten, erhalten Sie Zugang zu folgendem HTML- Texteditor:

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

cardetektiv.de GmbH Kurzanleitung Version 4.0 Software Cardetektiv Zukauf, Preisfindung, Marktanalyse Autor Christian Müller

Massenversand Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Diese Kurzanleitung beschreibt die nötigen Einstellungen, um mit pixafe Transfer Bilder auf einem Facebook Konto veröffentlichen zu können.

Transkript:

ios Rendering

ios Architektur

UIKit (Cocoa Touch) A composable, reusable, declarative, real-world inspired animation, and interaction system Framework für ios Apps Objective C Model View Controller Pattern

Core Graphics (Quartz)

Core Graphics vom GUI Toolkit verwendet. 2D Grafik Engine, die leichtgewichtiges Rendern unabhängig von Auflösung und Device nutzt einen Grafikkontext (CGContextRef), der Zusatzinformationen kapselt, um Bilder für Geräte wie PDF Dateien, Bitmap, Fenster, Layer oder Display zu malen. Ein Kontext kann wie eine drawing destination verstanden werden Painters Model

Demo Core Graphics

CG - Step by Step Ein neues Projekt erzeugen 1.In der XCode Entwicklungsumgebung ein neues Projekt erzeugen. 2.Auswahl der Single View Application option 3.Zum Beispiel als Projektname und Klassen-prefix: draw2d. Eine UIView abgeleitete Klasse erzeugen 1.Um Grafik auf einer View zu malen, brauchen wir eine Subklasse der UIView-Klasse. 2.Dort wird die drawrect-methode überschrieben. 3.Im ProjektNavigator wird im draw2d folder NewFile ausgewählt. 4.Im NewFile Fenster das Objective-C class icon auswählen, dann Next. 5.Im nächsten Options-Screen wird Subclass von menue in UIView geändert. 6.Speichern der Subclass als draw2d. 7.Im draw2dviewcontroller.xib file die UIView Komponente im View object auswählen. 8.Aufruf des Identity Inspector (View -> Utilities -> Show Identity Inspector), dort Class von UIView in unseren Klassennamen draw2d ändern.

CG - Step by Step #import "draw2d.h" @implementation draw2d - (id)initwithframe:(cgrect)frame { if (self = [super initwithframe:frame]) { // Initialization code } return self; } - (void)drawrect:(cgrect)rect { // Drawing code }.. @end

CG - Step by Step - (void)drawrect:(cgrect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); Die Linienbreite wird für den Kontext schon mal gesetzt. CGContextSetLineWidth(context, 2.0); Eine Referenz-Farbe (hier opaque blue) wird definiert (RGBA).: CGFloat components[] = {0.0, 0.0, 1.0, 1.0}; CGColorRef color = CGColorCreate(colorspace, components); Diese Farbe wird für Linien in diesem Kontext verwendet. CGContextSetStrokeColorWithColor(context, color); Startpunkt der Linie, links oben: CGContextMoveToPoint(context, 0, 0); Der Endpunkt soll bei 300, 400 sein. CGContextAddLineToPoint(context, 300, 400); Nun kann die Linie gezeichnet werden. Anschließend werden colorspace und color Objekte freigegeben. CGContextStrokePath(context); CGColorSpaceRelease(colorspace); CGColorRelease(color); }

CG - Das Ergebnis

3D in ios

OpenGL ES in ios Framebuffer Object(FBO) als Render Target ios spezifische Anpassung der FBOs Allocation und Verwendung spezieller Layer

Core Animation

Core Animation Layer basiertes zeichnen Compositor mit HW Unterstützung

Layer in ios OpenGL ES verwaltet seine States in Render Kontexten Umschalten zwischen Apps somit möglich EAGL ist die ios Implementierung einer OpenGL ES Render Context

Layer in ios

Framebuffer Objects Extension in OpenGL Einfaches rendern von Puffern, die nicht vom Windowing System zur Verfügung gestellt werden Off Screen Rendering FBO mehrfach verwendbar in GL Kontexten FBO kann als Input für weiteres Zeichnen verwendet werden

Framebuffer Objects

Beispiel OpenGL ES OffScreen

1. Generieren und Binden des FBO // Anlegen der Framebuffer-Referenz GLuint framebuffer; // glgenframebuffers generiert Framebuffer Object Namen. // void glgenframebuffers(glsizei n, GLuint *ids); // n = Anzahl der Objekt Namen // *ids = Array zur Speicherung der Namen glgenframebuffers(1, &framebuffer); // glbindframbuffer bindet einen Framebuffer an ein Framebuffer Target, // welches es ermöglicht Schreib- und Lese-Operationen getrennt voneinander zu verarabeiten. // void glbindframebuffer(glenum target, GLuint framebuffer); // target = Framebuffer Target: GL_FRAMEBUFFER {GL_DRAW_FRAMEBUFFER & GL_READ_FRAMEBUFFER} glbindframebuffer(gl_framebuffer, framebuffer);

2. Generieren und Binden eines Images // Anlegen der DepthRenderbufferreferenz GLuint depthrenderbuffer; // glgenrenderbuffers generiert Renderbuffer Object Namen. // void glgenrenderbuffers(glsizei n, GLuint *renderbuffers); // n = Anzahl der Objekt Namen // *renderbuffers = Array zur Speicherung der Namen glgenrenderbuffers(1, &depthrenderbuffer); // glbindframbuffer bindet einen Framebuffer an ein Renderbuffer Target. // void glbindrenderbuffer(glenum target, GLuint renderbuffer); // target = Renderbuffer Target ist immer: GL_RENDERBUFFER glbindrenderbuffer(gl_renderbuffer, depthrenderbuffer);

3. Erstellen des Renderbuffer Speichers // glrenderbufferstorage erstellt und initialisiert ein Renderbuffer Object Store. // Da in diesem Beispiel ein Depth-Renderbuffer erzeugt wird, muss auch das // Pixelformat entsprechend gewählt werden. // void glrenderbufferstorage(glenum target, GLenum internalformat, // GLsizei width, GLsizei height); // target = Renderbuffer Target immer GL_RENDERBUFFER // internalformat = Gibt das Pixelformat an. Folgende Konstanten sind möglich: // GL_RGBA4, GL_RGB565, GL_RGB5_A1,GL_DEPTH_COMPONENT16, or GL_STENCIL_INDEX8 // width/heigth = Maße des Buffers in Pixel glrenderbufferstorage(gl_renderbuffer, GL_DEPTH_COMPONENT16, width, height); // glframebufferrenderbuffer hängt den Renderbuffer an ein Framebuffer Object // void glframebufferrenderbuffer(glenum target, GLenum attachment, // GLenum renderbuffertarget, GLuint renderbuffer); // target = Renderbuffer Target immer GL_FRAMEBUFFER // attachment = Gibt den Einhängepunkt an. // Je nach Buffertyp sind hier folgende Konstanten möglich: // GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT // renderbuffer = Referenz auf Renderbuffer Objekt glframebufferrenderbuffer(gl_framebuffer, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthrenderbuffer);

4. Vollständigkeitsprüfung // glcheckframebufferstatus Prüft ob das Framebuffer Object vollständig ist. // Nach erfolgreicher Prüfung kann dieses dann verwendet werden GLenum status = glcheckframebufferstatus(gl_framebuffer) ; if(status = GL_FRAMEBUFFER_COMPLETE) { NSLog(@"failed to make complete framebuffer object %x", status); } return YES; }

Beispiel + Demo OpenGL ES OnScreen

+ (Class) layerclass { return [CAEAGLLayer class]; } 1. UIView

2. Layer und Context CAEAGLLayer *eagllayer = (CAEAGLLayer *)self.layer; // Konfiguration als undurchlässig aus Performancegründen eagllayer.opaque = TRUE; // Konfigurieren des Layers. Dies bezieht sich auf das Farbformat // -> keaglcolorformatrgba8 und ob die gerenderten Daten verworfen // werden sollen // nachdem sie angezeigt wurden -> keagldrawablepropertyretainedbacking eagllayer.drawableproperties = [NSDictionary dictionarywithobjectsandkeys: [NSNumber numberwithbool:false], keagldrawablepropertyretainedbacking, keaglcolorformatrgba8, keagldrawablepropertycolorformat, nil]; // Beispiel zum Allokieren eines OpenGL ES2.0 Kontextes. EAGLContext* mycontext = [[EAGLContext alloc] initwithapi:keaglrenderingapiopengles2]; // Um später die gerenderten Bilder anzeigen zu können muss der Kontext // noch aktiviert werden. [EAGLContext setcurrentcontext: mycontext];

3. ColorRenderBuffer GLuint colorrenderbuffer; glgenrenderbuffers(1, &colorrenderbuffer); glbindrenderbuffer(gl_renderbuffer, colorrenderbuffer); // Verknüpfung des Renderbuffer Objektes mit dem OpenGL ES2.0 Kontext und // dem Core Animation Layer auf den gerendert werden soll. [mycontext renderbufferstorage:gl_renderbuffer fromdrawable:eagllayer]; glframebufferrenderbuffer(gl_framebuffer,gl_color_attachment0,gl_renderb UFFER, colorrenderbuffer);

3. ColorRenderBuffer - (void)render { //... // Initialisiere Beispieldaten //... // Setzen des EAGL Kontextes [EAGLContext setcurrentcontext:mycontext]; //... glclearcolor(0.5f, 0.4f, 0.5f, 1.0f); glclear(gl_color_buffer_bit); //... // Initialisieren und Aktivieren von Vertexarrays //... glenablevertexattribarray(attrib_color); // Tatsächliches Zeichnen der Arrays gldrawarrays(gl_triangle_strip, 0, 4); // Erneutes Binden des ColorRenderBuffers in den aktuellen Kontext } glbindrenderbuffer(gl_renderbuffer, colorrenderbuffer); // Propagieren des ColorRenderBuffers um seine Anzeige auf dem Screen zu triggern [context presentrenderbuffer:gl_renderbuffer];

Bildschirminhalt auslesen GLint backingwidth, backingheight; glbindrenderbufferoes(gl_renderbuffer_oes, colorrenderbuffer); glgetrenderbufferparameterivoes(gl_renderbuffer_oes,gl_renderbuffer_width_oes, &backingwidth); glgetrenderbufferparameterivoes(gl_renderbuffer_oes,gl_renderbuffer_height_oes, &backingheight); NSInteger x = 0, y = 0; NSInteger width = backingwidth; NSInteger height = back ngheight; NSInteger datalength = width * height * 4; GLubyte *data = (GLubyte*)malloc(dataLength * sizeof(glubyte)); glpixelstorei(gl_pack_alignment, 4); glreadpixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);