Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 478 lines (351 sloc) 16.309 kb
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
1 //
2 // DefinitionController.m
3 // DicionarioAberto
4 //
5 // Created by Luís Rodrigues on 21/12/2010.
6 //
7
8 #import "DefinitionController.h"
9
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
10 @implementation DefinitionController
6499873 @goblindegook Correcções, mais documentação.
goblindegook authored
11
12afcec @goblindegook Ajustes ao CSS, menu do ecrã informativo passado para plist.
goblindegook authored
12 #pragma mark Instance Methods
13
6499873 @goblindegook Correcções, mais documentação.
goblindegook authored
14 - (id)initWithRequest:(NSString *)entry atIndex:(int)n {
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
15 if (self == [super init]) {
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
16 requestResults = nil;
17 requestEntry = [entry copy];
18 requestN = n;
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
19 }
20 return self;
21 }
22
23
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
24 - (void)viewWillAppear:(BOOL)animated {
25 }
26
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
27
67d07f9 @goblindegook Índice do homónimo na apresentação da definição.
goblindegook authored
28 // Additional setup after loading the view, typically from a nib.
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
29 - (void)viewDidLoad {
30 [super viewDidLoad];
31
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
32 // Navigation bar
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
33 UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
34 [infoButton addTarget:self action:@selector(showInfoTable) forControlEvents:UIControlEventTouchUpInside];
35 self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease];
36
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
37 // Activity indicator
38 activityIndicator.layer.cornerRadius = 8.0f;
39
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
40 // Swipe gestures
41 swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightAction)];
42 swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
43 swipeRight.delegate = self;
44 [container addGestureRecognizer:swipeRight];
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
45
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
46 swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction)];
47 swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
48 swipeLeft.delegate = self;
49 [container addGestureRecognizer:swipeLeft];
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
50
51 swipeDoesNothing = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDoesNothingAction)];
52 swipeDoesNothing.direction = UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown;
53 swipeDoesNothing.delegate = self;
54 [container addGestureRecognizer:swipeDoesNothing];
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
55
7d70ea0 @goblindegook Alterações cosméticas.
goblindegook authored
56 // Navigation bar shadow
57 navBarShadow.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithWhite:0 alpha:0.6].CGColor, (id)[UIColor colorWithWhite:0 alpha:0].CGColor, nil];
58
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
59 definitionView1.delegate = self;
60 definitionView2.delegate = self;
61
20a6d5e @goblindegook Pequenas correcções.
goblindegook authored
62 pager.numberOfPages = 1;
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
63 transitioning = NO;
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
64 touchRequest = NO;
a9b9b20 @goblindegook Correcções: Definição em minúsculas no rodapé; Linha entre células da…
goblindegook authored
65 mainViewHasLoaded = NO;
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
66
67 [self searchDicionarioAberto:requestEntry];
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
68 }
69
70
71 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
72 // Return YES for supported orientations
73 return YES;
74 }
75
76
0398b0b @goblindegook Corrigidas certas condições em que um swipe era permitido; indicador …
goblindegook authored
77 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
78 activityIndicatorState = activityIndicator.hidden;
79 activityIndicator.hidden = YES;
80 }
81
82
83 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
a9b9b20 @goblindegook Correcções: Definição em minúsculas no rodapé; Linha entre células da…
goblindegook authored
84 activityIndicator.hidden = mainViewHasLoaded || activityIndicatorState;
0398b0b @goblindegook Corrigidas certas condições em que um swipe era permitido; indicador …
goblindegook authored
85 }
86
87
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
88 - (void)didReceiveMemoryWarning {
89 // Releases the view if it doesn't have a superview.
90 [super didReceiveMemoryWarning];
91 // Release any cached data, images, etc that aren't in use.
2c12641 @goblindegook Consultas à API remota e parsing de XML
goblindegook authored
92 }
93
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
94 - (void)viewDidUnload {
95 [super viewDidUnload];
96 // Release any retained subviews of the main view.
97 // e.g. self.myOutlet = nil;
98 }
99
100
101 - (void)dealloc {
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
102 [swipeLeft release];
103 [swipeRight release];
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
104 [swipeDoesNothing release];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
105 [pager release];
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
106 [activityIndicator release];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
107 [definitionView1 release];
108 [definitionView2 release];
109 [container release];
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
110 [touchRequestPreviousEntry release];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
111 [requestEntry release];
112 [requestResults release];
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
113 [super dealloc];
114 }
115
116
2c12641 @goblindegook Consultas à API remota e parsing de XML
goblindegook authored
117 // Generate HTML entry
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
118 - (NSString *)htmlEntryFrom:(NSArray *)entries atIndex:(int)n {
d5d5e52 @goblindegook Style
goblindegook authored
119
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
120 NSString *entryOrth = nil;
121
a55ca23 @goblindegook Indicador de actividade na rede, gestos para redimensionamento do texto.
goblindegook authored
122 NSMutableString *content = [NSMutableString stringWithString:@""];
123
124 // Header
125 NSString *headerPath = [[NSBundle mainBundle] pathForResource:@"_def_header" ofType:@"html" inDirectory:@"HTML"];
126 [content appendString:[NSString stringWithContentsOfFile:headerPath encoding:NSUTF8StringEncoding error:nil]];
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
127
128 // Loop over definition entries
4b253e6 @goblindegook Abandonando a abordagem por templates
goblindegook authored
129 for (Entry *entry in entries) {
2c12641 @goblindegook Consultas à API remota e parsing de XML
goblindegook authored
130 // Skip entry:
416be73 @goblindegook Pesquisa por prefixo na UISearchBar
goblindegook authored
131 if (n && entry.n && entry.n != n) {
2c12641 @goblindegook Consultas à API remota e parsing de XML
goblindegook authored
132 continue;
133 }
134
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
135 if (entryOrth == nil) {
a9b9b20 @goblindegook Correcções: Definição em minúsculas no rodapé; Linha entre células da…
goblindegook authored
136 entryOrth = [DAParser markupToText:entry.entryForm.orth];
137 self.title = [entryOrth lowercaseString];
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
138 }
139
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
140 [content appendString:@"<h1 class=\"term\">"];
141 if (entries.count > 1) {
4b253e6 @goblindegook Abandonando a abordagem por templates
goblindegook authored
142 [content appendFormat:@"<span class=\"index\">%d</span>", entry.n];
143 }
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
144 [content appendString:entryOrth];
4b253e6 @goblindegook Abandonando a abordagem por templates
goblindegook authored
145 if ([entry.entryForm.phon length]) {
146 [content appendFormat:@"<span class=\"phon\">, (%@)</span>", entry.entryForm.phon];
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
147 }
148 [content appendString:@"</h1>"];
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
149
4b253e6 @goblindegook Abandonando a abordagem por templates
goblindegook authored
150 [content appendString:@"<section class=\"senses\">"];
d219f72 @goblindegook Comunicação com a API
goblindegook authored
151 [content appendString:@"<section class=\"sense\">"];
152 [content appendString:@"<ol class=\"definitions\">"];
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
153
154 // Loop over definitions
7b7b613 @goblindegook Refactoring e definição do modelo Core Data
goblindegook authored
155 for (EntrySense *sense in entry.entrySense) {
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
156
157 // Lexical category
d219f72 @goblindegook Comunicação com a API
goblindegook authored
158 if (sense.gramGrp) {
159 [content appendFormat:@"<div class=\"lex\">%@</div>", sense.gramGrp];
160 }
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
161
495fc82 @goblindegook Experiência: Sombra da UITableView usando DAGradientLayer.
goblindegook authored
162 BOOL firstDef = YES;
163
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
164 // Definitions
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
165 for (NSString *chunk in [[DAParser markupToHTML:sense.def] componentsSeparatedByString: @"\n"]) {
dd6da1f @goblindegook Correcções e optimizações
goblindegook authored
166
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
167 if (chunk.length > 0) {
b532099 @goblindegook Correcções à apresentação de definições.
goblindegook authored
168 if ([[chunk substringToIndex:1] isEqual:@"("]) {
169 [content appendFormat:@"<div class=\"note\">%@</div>", chunk];
170
171 } else {
172 [content appendString:@"<li><span class=\"singledef\">"];
173 if (firstDef && sense.usg.text.length > 0) {
174 [content appendFormat:@"<span class=\"usage %@\">%@</span> ", sense.usg.type, sense.usg.text];
175 firstDef = NO;
176 }
177 [content appendString:chunk];
178 [content appendString:@"</span></li>"];
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
179 }
180 }
181 }
182 }
183
d219f72 @goblindegook Comunicação com a API
goblindegook authored
184 [content appendString:@"</ol>"];
4b253e6 @goblindegook Abandonando a abordagem por templates
goblindegook authored
185 [content appendString:@"</section>"];
186
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
187 // Etymology
d219f72 @goblindegook Comunicação com a API
goblindegook authored
188 if (entry.entryEtymology.text) {
189 [content appendString:@"<section class=\"etym\">"];
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
190 [content appendString:[DAParser markupToHTML:entry.entryEtymology.text]];
d219f72 @goblindegook Comunicação com a API
goblindegook authored
191 [content appendString:@"</section>"];
192 }
193
4b253e6 @goblindegook Abandonando a abordagem por templates
goblindegook authored
194 [content appendString:@"</section>"];
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
195 }
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
196
a55ca23 @goblindegook Indicador de actividade na rede, gestos para redimensionamento do texto.
goblindegook authored
197 // Footer
198 NSString *footerPath = [[NSBundle mainBundle] pathForResource:@"_def_footer" ofType:@"html" inDirectory:@"HTML"];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
199 NSMutableString *footer = [NSMutableString stringWithContentsOfFile:footerPath encoding:NSUTF8StringEncoding error:nil];
d5d5e52 @goblindegook Style
goblindegook authored
200
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
201 footer = (NSMutableString *)[[NSRegularExpression regularExpressionWithPattern:@"%ENTRY%" options:0 error:nil] stringByReplacingMatchesInString:footer options:0 range:NSMakeRange(0, [footer length]) withTemplate:entryOrth];
202
203 footer = (NSMutableString *)[[NSRegularExpression regularExpressionWithPattern:@"%FOOTER_CLASS%" options:0 error:nil] stringByReplacingMatchesInString:footer options:0 range:NSMakeRange(0, [footer length]) withTemplate:(n && [entries count] > 1) ? @"pager" : @""];
204
205 [content appendString:footer];
206
8d3ecdc @goblindegook Optimizações várias, hiperligações entre definições.
goblindegook authored
207 return content;
208 }
209
210
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
211 - (void)searchDicionarioAberto:(NSString *)query {
8d3ecdc @goblindegook Optimizações várias, hiperligações entre definições.
goblindegook authored
212 // Obtain definition from DicionarioAberto API
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
213 NSString *cachedResponse = [DARemote fetchCachedResultForQuery:query ofType:DARemoteGetEntry error:nil];
8d3ecdc @goblindegook Optimizações várias, hiperligações entre definições.
goblindegook authored
214
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
215 requestResults = nil;
216
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
217 if (nil != cachedResponse) {
218 // Use cached response
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
219 requestResults = [[DAParser parseAPIResponse:cachedResponse list:NO] copy];
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
220 if (touchRequest) {
221 [self performTransitionTo:requestResults atIndex:requestN];
222 } else {
223 [self loadEntry:definitionView1 withArray:requestResults atIndex:requestN];
224 }
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
225
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
226 } else {
227 // Perform new asynchronous request
228 DARemote *connection = [[DARemote alloc] initWithQuery:query ofType:DARemoteGetEntry delegate:self];
229 if (nil == connection) {
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
230 touchRequest = NO;
67d07f9 @goblindegook Índice do homónimo na apresentação da definição.
goblindegook authored
231 // Connection error
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
232 [self loadError:definitionView1 ofType:DARemoteSearchNoConnection withString:query];
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
233 } else {
234 activityIndicator.hidden = NO;
a9b9b20 @goblindegook Correcções: Definição em minúsculas no rodapé; Linha entre células da…
goblindegook authored
235 mainViewHasLoaded = NO;
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
236 }
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
237
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
238 [connection release];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
239 }
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
240 }
241
242
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
243 - (void)loadError:(UIWebView *)wv ofType:(int)errorStatus withString:(NSString *)query {
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
244 activityIndicator.hidden = YES;
a9b9b20 @goblindegook Correcções: Definição em minúsculas no rodapé; Linha entre células da…
goblindegook authored
245 mainViewHasLoaded = YES;
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
246
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
247 NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
248 NSString *path;
249
250 if (errorStatus == DARemoteSearchNoConnection) {
251 self.title = @"Erro de ligação";
252 path = [[NSBundle mainBundle] pathForResource:@"error_connection" ofType:@"html" inDirectory:@"HTML"];
253
254 } else if (errorStatus == DARemoteSearchEmpty) {
255 self.title = @"Inexistente";
256 path = [[NSBundle mainBundle] pathForResource:@"error_notfound" ofType:@"html" inDirectory:@"HTML"];
257
258 } else {
259 self.title = @"Indisponível";
260 path = [[NSBundle mainBundle] pathForResource:@"error_unavailable" ofType:@"html" inDirectory:@"HTML"];
261 }
262
263
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
264 NSString *html = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
265
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
266 [definitionView1 loadHTMLString:html baseURL:baseURL];
78b1712 @goblindegook DefinitionView HTML
goblindegook authored
267 }
268
269
4c197fe @goblindegook Preparação para experiência: UIWebViews dentro de UIScrollView.
goblindegook authored
270 - (void)loadEntry:(UIWebView *)wv withArray:(NSArray *)entries atIndex:(int)n {
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
271 activityIndicator.hidden = YES;
a9b9b20 @goblindegook Correcções: Definição em minúsculas no rodapé; Linha entre células da…
goblindegook authored
272 mainViewHasLoaded = YES;
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
273
c8cfc40 @goblindegook Correcta apresentação de abreviaturas com caracteres sobrescritos na …
goblindegook authored
274 if (entries != nil && [entries count] && n > 0) {
275 pager.numberOfPages = [entries count];
276 pager.currentPage = n - 1;
277 } else {
278 pager.numberOfPages = 1;
279 pager.currentPage = 0;
280 }
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
281
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
282 NSString *html;
283 if (entries != nil && [entries count]) {
284 self.title = requestEntry;
285 html = [self htmlEntryFrom:entries atIndex:n];
286 NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
287 [wv loadHTMLString:html baseURL:baseURL];
288
289 } else {
290 [self loadError:wv ofType:DARemoteSearchEmpty withString:@""];
291 }
292
293
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
294 }
295
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
296
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
297 - (void)performTransitionTo:(NSArray *)results atIndex:(int)n {
298
299 if (!touchRequest && n == requestN) {
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
300 return;
301 }
302
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
303 BOOL transitionForward = NO;
304
305 if (touchRequest && [requestEntry caseInsensitiveCompare:touchRequestPreviousEntry] == NSOrderedAscending) {
306 transitionForward = YES;
307 } else if (n < requestN) {
308 transitionForward = YES;
309 }
310
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
311 CATransition *transition = [CATransition animation];
312 transition.duration = 0.5;
313 transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
314 transition.type = (transitionForward) ? kCATransitionMoveIn : kCATransitionReveal;
315 transition.subtype = (transitionForward) ? kCATransitionFromLeft : kCATransitionFromRight;
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
316 transition.delegate = self;
317
318 [container.layer addAnimation:transition forKey:nil];
319
320 requestN = n;
321 transitioning = YES;
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
322
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
323 [self loadEntry:definitionView2 withArray:results atIndex:n];
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
324
325 // Switch views only when definitionView2 finishes loading, see webViewDidFinishLoad
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
326 }
327
328
329 - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
330 transitioning = NO;
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
331 touchRequest = NO;
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
332 }
333
334
335 - (IBAction)changePage:(id)sender {
336 if (!transitioning) {
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
337 [self performTransitionTo:requestResults atIndex:(pager.currentPage + 1)];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
338 }
339 }
340
341
342 - (void)showInfoTable {
6499873 @goblindegook Correcções, mais documentação.
goblindegook authored
343 DADelegate *delegate = (DADelegate *)[[UIApplication sharedApplication] delegate];
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
344 InfoTableController *infoTable = [[InfoTableController alloc] init];
67d07f9 @goblindegook Índice do homónimo na apresentação da definição.
goblindegook authored
345 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:self.title style:UIBarButtonItemStyleBordered target:nil action:nil];
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
346 [delegate.navController pushViewController:infoTable animated:YES];
347 [infoTable release];
348 [self.navigationItem.backBarButtonItem release];
349 }
350
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
351 #pragma mark -
352 #pragma mark UIWebViewDelegate Methods
353
354 - (void)webViewDidStartLoad:(UIWebView *)webView {
355 }
356
357 - (void)webViewDidFinishLoad:(UIWebView *)webView {
0398b0b @goblindegook Corrigidas certas condições em que um swipe era permitido; indicador …
goblindegook authored
358 // Switch only when transitioning
5119d5d @goblindegook Indicadores de actividade.
goblindegook authored
359 if (transitioning && webView == definitionView2) {
360 definitionView1.hidden = YES;
361 definitionView2.hidden = NO;
362
363 UIWebView *tmp = definitionView2;
364 definitionView2 = definitionView1;
365 definitionView1 = tmp;
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
366
367 } else if (webView == definitionView1) {
20a6d5e @goblindegook Pequenas correcções.
goblindegook authored
368 definitionView1.hidden = NO;
369 }
0398b0b @goblindegook Corrigidas certas condições em que um swipe era permitido; indicador …
goblindegook authored
370
371 definitionView1.userInteractionEnabled = YES;
372 definitionView2.userInteractionEnabled = YES;
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
373 }
374
375 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)urlRequest navigationType:(UIWebViewNavigationType)navigationType {
376
377 if (navigationType == UIWebViewNavigationTypeLinkClicked) {
378 NSURL *url = [urlRequest URL];
379
380 if ([[url scheme] isEqualToString:@"aberto"]) {
381 // Internal links
382
383 if ([[url host] isEqualToString:@"define"]) {
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
384 touchRequest = YES;
385 touchRequestPreviousEntry = [requestEntry copy];
386 touchRequestPreviousN = requestN;
387
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
388 // Definition links (aberto://define:*/*)
389 requestEntry = [[url lastPathComponent] copy];
390 requestN = [[url port] integerValue];
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
391
392 // NSLog(@"Requested %@:%d", requestEntry, requestN);
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
393 [self searchDicionarioAberto:requestEntry];
394 }
395 return NO;
396
397 } else {
398 [[UIApplication sharedApplication] openURL:url];
399 return NO;
400 }
401 }
402
403 return YES;
404 }
405
406 #pragma mark -
407 #pragma mark UIGestureRecognizerDelegate Methods
1287915 @goblindegook Índice do ecrã informativo, HTML+CSS revisto.
goblindegook authored
408
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
409 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
410 return NO;
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
411 }
412
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
413
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
414 - (void)swipeRightAction {
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
415 if (!transitioning && requestN > 1) {
0398b0b @goblindegook Corrigidas certas condições em que um swipe era permitido; indicador …
goblindegook authored
416 definitionView1.userInteractionEnabled = NO;
417 definitionView2.userInteractionEnabled = NO;
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
418 [self performTransitionTo:requestResults atIndex:(requestN - 1)];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
419 }
420 }
421
422
423 - (void)swipeLeftAction {
0398b0b @goblindegook Corrigidas certas condições em que um swipe era permitido; indicador …
goblindegook authored
424 if (!transitioning && requestN > 0 && requestN < [requestResults count]) {
425 definitionView1.userInteractionEnabled = NO;
426 definitionView2.userInteractionEnabled = NO;
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
427 [self performTransitionTo:requestResults atIndex:(requestN + 1)];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
428 }
429 }
430
431
842d15c @goblindegook Gráficos para Retina Display; Ecrãs de erro; Swipes ligeiramente diag…
goblindegook authored
432 - (void)swipeDoesNothingAction {
433 // It really does nothing
434 }
435
436
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
437 #pragma mark -
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
438 #pragma mark DARemoteDelegate Methods
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
439
440
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
441 - (void)connectionDidFail:(DARemote *)connection {
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
442 [self loadError:definitionView1 ofType:DARemoteSearchNoConnection withString:connection.query];
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
443 }
444
416be73 @goblindegook Pesquisa por prefixo na UISearchBar
goblindegook authored
445
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
446 - (void)connectionDidFinish:(DARemote *)connection {
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
447
448 if (connection.statusCode < 400) {
449 // Success
450 NSString *response = [[NSString alloc] initWithData:connection.receivedData encoding:NSUTF8StringEncoding];
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
451
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
452 requestResults = [[DAParser parseAPIResponse:response list:NO] copy];
7d4b2ed @goblindegook Transição entre UIWebViews com swipes e controlador de página.
goblindegook authored
453
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
454 if (requestResults && [requestResults count]) {
455 [DARemote cacheResult:response forQuery:connection.query ofType:connection.type error:nil];
456 }
82f4fde @goblindegook É mais simples, seguro e correcto fazer os pedidos assíncronos atravé…
goblindegook authored
457
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
458 if (touchRequest) {
459 [self performTransitionTo:requestResults atIndex:requestN];
460 } else {
461 [self loadEntry:definitionView1 withArray:requestResults atIndex:requestN];
462 }
463
464 [response release];
465
d4c48f6 @goblindegook Erro apropriado para situações em que a definição não é encontrada.
goblindegook authored
466 } else if (connection.statusCode == 404) {
467 // Definition not found (404 Not found)
468 [self loadError:definitionView1 ofType:DARemoteSearchEmpty withString:connection.query];
469
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
470 } else {
d4c48f6 @goblindegook Erro apropriado para situações em que a definição não é encontrada.
goblindegook authored
471 // Service is unavailable (403 Forbidden, etc.)
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
472 [self loadError:definitionView1 ofType:DARemoteSearchUnavailable withString:connection.query];
3c52a26 @goblindegook Mais transições; Hyphenate.js retirado por problemas de desempenho (e…
goblindegook authored
473 }
20a9ddf @goblindegook Detecção de erros mais robusta e precisa; Imagem de arranque; Mais gr…
goblindegook authored
474
0b55ee7 @goblindegook Refactoring, UIWebView para definições
goblindegook authored
475 }
476
477 @end
Something went wrong with that request. Please try again.