OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ios/chrome/browser/translate/before_translate_infobar_controller.h" | 5 #include "ios/chrome/browser/translate/before_translate_infobar_controller.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #import <UIKit/UIKit.h> | 8 #import <UIKit/UIKit.h> |
9 | 9 |
10 #include "base/ios/weak_nsobject.h" | |
11 #include "base/logging.h" | 10 #include "base/logging.h" |
12 #include "base/mac/scoped_nsobject.h" | |
13 #include "base/strings/sys_string_conversions.h" | 11 #include "base/strings/sys_string_conversions.h" |
14 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
15 #include "components/strings/grit/components_strings.h" | 13 #include "components/strings/grit/components_strings.h" |
16 #include "components/translate/core/browser/translate_infobar_delegate.h" | 14 #include "components/translate/core/browser/translate_infobar_delegate.h" |
17 #include "ios/chrome/browser/translate/translate_infobar_tags.h" | 15 #include "ios/chrome/browser/translate/translate_infobar_tags.h" |
18 #import "ios/chrome/browser/ui/infobars/infobar_view.h" | 16 #import "ios/chrome/browser/ui/infobars/infobar_view.h" |
19 #import "ios/chrome/browser/ui/infobars/infobar_view_delegate.h" | 17 #import "ios/chrome/browser/ui/infobars/infobar_view_delegate.h" |
20 #include "ui/base/l10n/l10n_util.h" | 18 #include "ui/base/l10n/l10n_util.h" |
21 #include "ui/gfx/image/image.h" | 19 #include "ui/gfx/image/image.h" |
22 | 20 |
| 21 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 22 #error "This file requires ARC support." |
| 23 #endif |
| 24 |
23 namespace { | 25 namespace { |
24 | 26 |
25 CGFloat kNavigationBarHeight = 44; | 27 CGFloat kNavigationBarHeight = 44; |
26 CGFloat kUIPickerHeight = 216; | 28 CGFloat kUIPickerHeight = 216; |
27 CGFloat kUIPickerFontSize = 26; | 29 CGFloat kUIPickerFontSize = 26; |
28 NSTimeInterval kPickerAnimationDurationInSeconds = 0.2; | 30 NSTimeInterval kPickerAnimationDurationInSeconds = 0.2; |
29 | 31 |
30 } // namespace | 32 } // namespace |
31 | 33 |
32 // The class is a data source and delegate to the UIPickerView that contains the | 34 // The class is a data source and delegate to the UIPickerView that contains the |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 #pragma mark - | 71 #pragma mark - |
70 #pragma mark UIPickerViewDelegate | 72 #pragma mark UIPickerViewDelegate |
71 | 73 |
72 - (UIView*)pickerView:(UIPickerView*)pickerView | 74 - (UIView*)pickerView:(UIPickerView*)pickerView |
73 viewForRow:(NSInteger)row | 75 viewForRow:(NSInteger)row |
74 forComponent:(NSInteger)component | 76 forComponent:(NSInteger)component |
75 reusingView:(UIView*)view { | 77 reusingView:(UIView*)view { |
76 DCHECK_EQ(0, component); | 78 DCHECK_EQ(0, component); |
77 UILabel* label = [view isKindOfClass:[UILabel class]] | 79 UILabel* label = [view isKindOfClass:[UILabel class]] |
78 ? (UILabel*)view | 80 ? (UILabel*)view |
79 : [[[UILabel alloc] init] autorelease]; | 81 : [[UILabel alloc] init]; |
80 [label setText:base::SysUTF16ToNSString( | 82 [label setText:base::SysUTF16ToNSString( |
81 _translateInfoBarDelegate->language_name_at(row))]; | 83 _translateInfoBarDelegate->language_name_at(row))]; |
82 [label setTextAlignment:NSTextAlignmentCenter]; | 84 [label setTextAlignment:NSTextAlignmentCenter]; |
83 UIFont* font = [UIFont systemFontOfSize:kUIPickerFontSize]; | 85 UIFont* font = [UIFont systemFontOfSize:kUIPickerFontSize]; |
84 BOOL enabled = YES; | 86 BOOL enabled = YES; |
85 if (row == _initialRow) | 87 if (row == _initialRow) |
86 font = [UIFont boldSystemFontOfSize:kUIPickerFontSize]; | 88 font = [UIFont boldSystemFontOfSize:kUIPickerFontSize]; |
87 else if (row == _disabledRow) | 89 else if (row == _disabledRow) |
88 enabled = NO; | 90 enabled = NO; |
89 [label setFont:font]; | 91 [label setFont:font]; |
(...skipping 15 matching lines...) Expand all Loading... |
105 - (void)dismissLanguageSelectionView; | 107 - (void)dismissLanguageSelectionView; |
106 // Changes the text on the view to match the language. | 108 // Changes the text on the view to match the language. |
107 - (void)updateInfobarLabelOnView:(InfoBarView*)view; | 109 - (void)updateInfobarLabelOnView:(InfoBarView*)view; |
108 | 110 |
109 @end | 111 @end |
110 | 112 |
111 @implementation BeforeTranslateInfoBarController { | 113 @implementation BeforeTranslateInfoBarController { |
112 translate::TranslateInfoBarDelegate* _translateInfoBarDelegate; // weak | 114 translate::TranslateInfoBarDelegate* _translateInfoBarDelegate; // weak |
113 // A fullscreen view that catches all touch events and contains a UIPickerView | 115 // A fullscreen view that catches all touch events and contains a UIPickerView |
114 // and a UINavigationBar. | 116 // and a UINavigationBar. |
115 base::scoped_nsobject<UIView> _languageSelectionView; | 117 UIView* _languageSelectionView; |
116 // Stores whether the user is currently choosing in the UIPickerView the | 118 // Stores whether the user is currently choosing in the UIPickerView the |
117 // original language, or the target language. | 119 // original language, or the target language. |
118 NSUInteger _languageSelectionType; | 120 NSUInteger _languageSelectionType; |
119 // The language picker. | 121 // The language picker. |
120 base::scoped_nsobject<UIPickerView> _languagePicker; | 122 UIPickerView* _languagePicker; |
121 // Navigation bar associated with the picker with "Done" and "Cancel" buttons. | 123 // Navigation bar associated with the picker with "Done" and "Cancel" buttons. |
122 base::scoped_nsobject<UINavigationBar> _navigationBar; | 124 UINavigationBar* _navigationBar; |
123 // The controller of the languagePicker. Needs to be an ivar because | 125 // The controller of the languagePicker. Needs to be an ivar because |
124 // |_languagePicker| does not retain it. | 126 // |_languagePicker| does not retain it. |
125 base::scoped_nsobject<LanguagePickerController> _languagePickerController; | 127 LanguagePickerController* _languagePickerController; |
126 } | 128 } |
127 | 129 |
128 #pragma mark - | 130 #pragma mark - |
129 #pragma mark InfoBarControllerProtocol | 131 #pragma mark InfoBarControllerProtocol |
130 | 132 |
131 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate | 133 - (InfoBarView*)viewForDelegate:(infobars::InfoBarDelegate*)delegate |
132 frame:(CGRect)frame { | 134 frame:(CGRect)frame { |
133 base::scoped_nsobject<InfoBarView> infoBarView; | 135 InfoBarView* infoBarView; |
134 _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate(); | 136 _translateInfoBarDelegate = delegate->AsTranslateInfoBarDelegate(); |
135 infoBarView.reset( | 137 infoBarView = |
136 [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]); | 138 [[InfoBarView alloc] initWithFrame:frame delegate:self.delegate]; |
137 // Icon | 139 // Icon |
138 gfx::Image icon = _translateInfoBarDelegate->GetIcon(); | 140 gfx::Image icon = _translateInfoBarDelegate->GetIcon(); |
139 if (!icon.IsEmpty()) | 141 if (!icon.IsEmpty()) |
140 [infoBarView addLeftIcon:icon.ToUIImage()]; | 142 [infoBarView addLeftIcon:icon.ToUIImage()]; |
141 | 143 |
142 // Main text. | 144 // Main text. |
143 [self updateInfobarLabelOnView:infoBarView]; | 145 [self updateInfobarLabelOnView:infoBarView]; |
144 | 146 |
145 // Close button. | 147 // Close button. |
146 [infoBarView addCloseButtonWithTag:TranslateInfoBarIOSTag::BEFORE_DENY | 148 [infoBarView addCloseButtonWithTag:TranslateInfoBarIOSTag::BEFORE_DENY |
147 target:self | 149 target:self |
148 action:@selector(infoBarButtonDidPress:)]; | 150 action:@selector(infoBarButtonDidPress:)]; |
149 // Other buttons. | 151 // Other buttons. |
150 NSString* buttonAccept = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_ACCEPT); | 152 NSString* buttonAccept = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_ACCEPT); |
151 NSString* buttonDeny = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_DENY); | 153 NSString* buttonDeny = l10n_util::GetNSString(IDS_TRANSLATE_INFOBAR_DENY); |
152 [infoBarView addButton1:buttonAccept | 154 [infoBarView addButton1:buttonAccept |
153 tag1:TranslateInfoBarIOSTag::BEFORE_ACCEPT | 155 tag1:TranslateInfoBarIOSTag::BEFORE_ACCEPT |
154 button2:buttonDeny | 156 button2:buttonDeny |
155 tag2:TranslateInfoBarIOSTag::BEFORE_DENY | 157 tag2:TranslateInfoBarIOSTag::BEFORE_DENY |
156 target:self | 158 target:self |
157 action:@selector(infoBarButtonDidPress:)]; | 159 action:@selector(infoBarButtonDidPress:)]; |
158 return [[infoBarView retain] autorelease]; | 160 return infoBarView; |
159 } | 161 } |
160 | 162 |
161 - (void)updateInfobarLabelOnView:(InfoBarView*)view { | 163 - (void)updateInfobarLabelOnView:(InfoBarView*)view { |
162 NSString* originalLanguage = base::SysUTF16ToNSString( | 164 NSString* originalLanguage = base::SysUTF16ToNSString( |
163 _translateInfoBarDelegate->original_language_name()); | 165 _translateInfoBarDelegate->original_language_name()); |
164 NSString* targetLanguage = base::SysUTF16ToNSString( | 166 NSString* targetLanguage = base::SysUTF16ToNSString( |
165 _translateInfoBarDelegate->target_language_name()); | 167 _translateInfoBarDelegate->target_language_name()); |
166 base::string16 originalLanguageWithLink = | 168 base::string16 originalLanguageWithLink = |
167 base::SysNSStringToUTF16([[view class] | 169 base::SysNSStringToUTF16([[view class] |
168 stringAsLink:originalLanguage | 170 stringAsLink:originalLanguage |
169 tag:TranslateInfoBarIOSTag::BEFORE_SOURCE_LANGUAGE]); | 171 tag:TranslateInfoBarIOSTag::BEFORE_SOURCE_LANGUAGE]); |
170 base::string16 targetLanguageWithLink = base::SysNSStringToUTF16([[view class] | 172 base::string16 targetLanguageWithLink = base::SysNSStringToUTF16([[view class] |
171 stringAsLink:targetLanguage | 173 stringAsLink:targetLanguage |
172 tag:TranslateInfoBarIOSTag::BEFORE_TARGET_LANGUAGE]); | 174 tag:TranslateInfoBarIOSTag::BEFORE_TARGET_LANGUAGE]); |
173 NSString* label = | 175 NSString* label = |
174 l10n_util::GetNSStringF(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE_IOS, | 176 l10n_util::GetNSStringF(IDS_TRANSLATE_INFOBAR_BEFORE_MESSAGE_IOS, |
175 originalLanguageWithLink, targetLanguageWithLink); | 177 originalLanguageWithLink, targetLanguageWithLink); |
176 | 178 |
177 base::WeakNSObject<BeforeTranslateInfoBarController> weakSelf(self); | 179 __weak BeforeTranslateInfoBarController* weakSelf = self; |
178 [view addLabel:label | 180 [view addLabel:label |
179 action:^(NSUInteger tag) { | 181 action:^(NSUInteger tag) { |
180 [weakSelf infobarLinkDidPress:tag]; | 182 [weakSelf infobarLinkDidPress:tag]; |
181 }]; | 183 }]; |
182 } | 184 } |
183 | 185 |
184 - (void)languageSelectionDone { | 186 - (void)languageSelectionDone { |
185 size_t selectedRow = [_languagePicker selectedRowInComponent:0]; | 187 size_t selectedRow = [_languagePicker selectedRowInComponent:0]; |
186 std::string lang = _translateInfoBarDelegate->language_code_at(selectedRow); | 188 std::string lang = _translateInfoBarDelegate->language_code_at(selectedRow); |
187 if (_languageSelectionType == | 189 if (_languageSelectionType == |
(...skipping 14 matching lines...) Expand all Loading... |
202 DCHECK_EQ(_languagePicker == nil, _navigationBar == nil); | 204 DCHECK_EQ(_languagePicker == nil, _navigationBar == nil); |
203 if (_languagePicker == nil) | 205 if (_languagePicker == nil) |
204 return; | 206 return; |
205 // Sets the picker's delegate and data source to nil, because the | 207 // Sets the picker's delegate and data source to nil, because the |
206 // |_languagePickerController| may be destroyed before the picker is hidden, | 208 // |_languagePickerController| may be destroyed before the picker is hidden, |
207 // and even though the interactions with the picker are disabled, it might | 209 // and even though the interactions with the picker are disabled, it might |
208 // still be turning and requesting data from the data source or calling the | 210 // still be turning and requesting data from the data source or calling the |
209 // delegate. | 211 // delegate. |
210 [_languagePicker setDataSource:nil]; | 212 [_languagePicker setDataSource:nil]; |
211 [_languagePicker setDelegate:nil]; | 213 [_languagePicker setDelegate:nil]; |
212 _languagePickerController.reset(); | 214 _languagePickerController = nil; |
213 // Animate the picker away. | 215 // Animate the picker away. |
214 CGRect languagePickerFrame = [_languagePicker frame]; | 216 CGRect languagePickerFrame = [_languagePicker frame]; |
215 CGRect navigationBarFrame = [_navigationBar frame]; | 217 CGRect navigationBarFrame = [_navigationBar frame]; |
216 const CGFloat animationHeight = | 218 const CGFloat animationHeight = |
217 languagePickerFrame.size.height + navigationBarFrame.size.height; | 219 languagePickerFrame.size.height + navigationBarFrame.size.height; |
218 languagePickerFrame.origin.y += animationHeight; | 220 languagePickerFrame.origin.y += animationHeight; |
219 navigationBarFrame.origin.y += animationHeight; | 221 navigationBarFrame.origin.y += animationHeight; |
220 auto blockLanguagePicker(_languagePicker); | 222 UIPickerView* blockLanguagePicker = _languagePicker; |
221 auto blockNavigationBar(_navigationBar); | 223 UINavigationBar* blockNavigationBar = _navigationBar; |
222 _languagePicker.reset(); | 224 _languagePicker = nil; |
223 _navigationBar.reset(); | 225 _navigationBar = nil; |
224 void (^animations)(void) = ^{ | 226 void (^animations)(void) = ^{ |
225 blockLanguagePicker.get().frame = languagePickerFrame; | 227 blockLanguagePicker.frame = languagePickerFrame; |
226 blockNavigationBar.get().frame = navigationBarFrame; | 228 blockNavigationBar.frame = navigationBarFrame; |
227 }; | 229 }; |
228 auto blockSelectionView(_languageSelectionView); | 230 UIView* blockSelectionView = _languageSelectionView; |
229 _languageSelectionView.reset(); | 231 _languageSelectionView = nil; |
230 void (^completion)(BOOL finished) = ^(BOOL finished) { | 232 void (^completion)(BOOL finished) = ^(BOOL finished) { |
231 [blockSelectionView removeFromSuperview]; | 233 [blockSelectionView removeFromSuperview]; |
232 }; | 234 }; |
233 [UIView animateWithDuration:kPickerAnimationDurationInSeconds | 235 [UIView animateWithDuration:kPickerAnimationDurationInSeconds |
234 animations:animations | 236 animations:animations |
235 completion:completion]; | 237 completion:completion]; |
236 } | 238 } |
237 | 239 |
238 #pragma mark - Handling of User Events | 240 #pragma mark - Handling of User Events |
239 | 241 |
(...skipping 25 matching lines...) Expand all Loading... |
265 // UINavigationBar. | 267 // UINavigationBar. |
266 UIView* parentView = | 268 UIView* parentView = |
267 [[UIApplication sharedApplication] keyWindow].rootViewController.view; | 269 [[UIApplication sharedApplication] keyWindow].rootViewController.view; |
268 // Convert the parent frame to handle device rotation. | 270 // Convert the parent frame to handle device rotation. |
269 CGRect parentFrame = | 271 CGRect parentFrame = |
270 CGRectApplyAffineTransform([parentView frame], [parentView transform]); | 272 CGRectApplyAffineTransform([parentView frame], [parentView transform]); |
271 const CGFloat totalPickerHeight = kUIPickerHeight + kNavigationBarHeight; | 273 const CGFloat totalPickerHeight = kUIPickerHeight + kNavigationBarHeight; |
272 CGRect languageSelectionViewFrame = | 274 CGRect languageSelectionViewFrame = |
273 CGRectMake(0, parentFrame.size.height - totalPickerHeight, | 275 CGRectMake(0, parentFrame.size.height - totalPickerHeight, |
274 parentFrame.size.width, totalPickerHeight); | 276 parentFrame.size.width, totalPickerHeight); |
275 _languageSelectionView.reset( | 277 _languageSelectionView = |
276 [[UIView alloc] initWithFrame:languageSelectionViewFrame]); | 278 [[UIView alloc] initWithFrame:languageSelectionViewFrame]; |
277 [_languageSelectionView | 279 [_languageSelectionView |
278 setAutoresizingMask:UIViewAutoresizingFlexibleWidth | | 280 setAutoresizingMask:UIViewAutoresizingFlexibleWidth | |
279 UIViewAutoresizingFlexibleTopMargin]; | 281 UIViewAutoresizingFlexibleTopMargin]; |
280 [parentView addSubview:_languageSelectionView]; | 282 [parentView addSubview:_languageSelectionView]; |
281 | 283 |
282 // Creates the navigation bar and its buttons. | 284 // Creates the navigation bar and its buttons. |
283 CGRect finalPickerFrame = CGRectMake( | 285 CGRect finalPickerFrame = CGRectMake( |
284 0, [_languageSelectionView frame].size.height - kUIPickerHeight, | 286 0, [_languageSelectionView frame].size.height - kUIPickerHeight, |
285 [_languageSelectionView frame].size.width, kUIPickerHeight); | 287 [_languageSelectionView frame].size.width, kUIPickerHeight); |
286 CGRect finalNavigationBarFrame = CGRectMake( | 288 CGRect finalNavigationBarFrame = CGRectMake( |
287 0, 0, [_languageSelectionView frame].size.width, kNavigationBarHeight); | 289 0, 0, [_languageSelectionView frame].size.width, kNavigationBarHeight); |
288 // The language picker animates from the bottom of the screen. | 290 // The language picker animates from the bottom of the screen. |
289 CGRect initialPickerFrame = finalPickerFrame; | 291 CGRect initialPickerFrame = finalPickerFrame; |
290 initialPickerFrame.origin.y += totalPickerHeight; | 292 initialPickerFrame.origin.y += totalPickerHeight; |
291 CGRect initialNavigationBarFrame = finalNavigationBarFrame; | 293 CGRect initialNavigationBarFrame = finalNavigationBarFrame; |
292 initialNavigationBarFrame.origin.y += totalPickerHeight; | 294 initialNavigationBarFrame.origin.y += totalPickerHeight; |
293 | 295 |
294 _navigationBar.reset( | 296 _navigationBar = |
295 [[UINavigationBar alloc] initWithFrame:initialNavigationBarFrame]); | 297 [[UINavigationBar alloc] initWithFrame:initialNavigationBarFrame]; |
296 const UIViewAutoresizing resizingMask = | 298 const UIViewAutoresizing resizingMask = |
297 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; | 299 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; |
298 [_navigationBar setAutoresizingMask:resizingMask]; | 300 [_navigationBar setAutoresizingMask:resizingMask]; |
299 base::scoped_nsobject<UIBarButtonItem> doneButton([[UIBarButtonItem alloc] | 301 UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] |
300 initWithBarButtonSystemItem:UIBarButtonSystemItemDone | 302 initWithBarButtonSystemItem:UIBarButtonSystemItemDone |
301 target:self | 303 target:self |
302 action:@selector(languageSelectionDone)]); | 304 action:@selector(languageSelectionDone)]; |
303 base::scoped_nsobject<UIBarButtonItem> cancelButton([[UIBarButtonItem alloc] | 305 UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] |
304 initWithBarButtonSystemItem:UIBarButtonSystemItemCancel | 306 initWithBarButtonSystemItem:UIBarButtonSystemItemCancel |
305 target:self | 307 target:self |
306 action:@selector(dismissLanguageSelectionView)]); | 308 action:@selector(dismissLanguageSelectionView)]; |
307 base::scoped_nsobject<UINavigationItem> item( | 309 UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@""]; |
308 [[UINavigationItem alloc] initWithTitle:@""]); | |
309 [item setRightBarButtonItem:doneButton]; | 310 [item setRightBarButtonItem:doneButton]; |
310 [item setLeftBarButtonItem:cancelButton]; | 311 [item setLeftBarButtonItem:cancelButton]; |
311 [item setHidesBackButton:YES]; | 312 [item setHidesBackButton:YES]; |
312 [_navigationBar pushNavigationItem:item animated:NO]; | 313 [_navigationBar pushNavigationItem:item animated:NO]; |
313 | 314 |
314 // Creates the PickerView and its controller. | 315 // Creates the PickerView and its controller. |
315 NSInteger selectedRow; | 316 NSInteger selectedRow; |
316 NSInteger disabledRow; | 317 NSInteger disabledRow; |
317 NSInteger originalLanguageIndex = -1; | 318 NSInteger originalLanguageIndex = -1; |
318 NSInteger targetLanguageIndex = -1; | 319 NSInteger targetLanguageIndex = -1; |
(...skipping 12 matching lines...) Expand all Loading... |
331 DCHECK_GT(targetLanguageIndex, -1); | 332 DCHECK_GT(targetLanguageIndex, -1); |
332 | 333 |
333 if (_languageSelectionType == | 334 if (_languageSelectionType == |
334 TranslateInfoBarIOSTag::BEFORE_SOURCE_LANGUAGE) { | 335 TranslateInfoBarIOSTag::BEFORE_SOURCE_LANGUAGE) { |
335 selectedRow = originalLanguageIndex; | 336 selectedRow = originalLanguageIndex; |
336 disabledRow = targetLanguageIndex; | 337 disabledRow = targetLanguageIndex; |
337 } else { | 338 } else { |
338 selectedRow = targetLanguageIndex; | 339 selectedRow = targetLanguageIndex; |
339 disabledRow = originalLanguageIndex; | 340 disabledRow = originalLanguageIndex; |
340 } | 341 } |
341 _languagePickerController.reset([[LanguagePickerController alloc] | 342 _languagePickerController = [[LanguagePickerController alloc] |
342 initWithDelegate:_translateInfoBarDelegate | 343 initWithDelegate:_translateInfoBarDelegate |
343 initialRow:selectedRow | 344 initialRow:selectedRow |
344 disabledRow:disabledRow]); | 345 disabledRow:disabledRow]; |
345 _languagePicker.reset( | 346 _languagePicker = [[UIPickerView alloc] initWithFrame:initialPickerFrame]; |
346 [[UIPickerView alloc] initWithFrame:initialPickerFrame]); | |
347 [_languagePicker setAutoresizingMask:resizingMask]; | 347 [_languagePicker setAutoresizingMask:resizingMask]; |
348 [_languagePicker setShowsSelectionIndicator:YES]; | 348 [_languagePicker setShowsSelectionIndicator:YES]; |
349 [_languagePicker setDataSource:_languagePickerController]; | 349 [_languagePicker setDataSource:_languagePickerController]; |
350 [_languagePicker setDelegate:_languagePickerController]; | 350 [_languagePicker setDelegate:_languagePickerController]; |
351 [_languagePicker setShowsSelectionIndicator:YES]; | 351 [_languagePicker setShowsSelectionIndicator:YES]; |
352 [_languagePicker setBackgroundColor:[self.view backgroundColor]]; | 352 [_languagePicker setBackgroundColor:[self.view backgroundColor]]; |
353 [_languagePicker selectRow:selectedRow inComponent:0 animated:NO]; | 353 [_languagePicker selectRow:selectedRow inComponent:0 animated:NO]; |
354 | 354 |
355 auto blockLanguagePicker(_languagePicker); | 355 UIPickerView* blockLanguagePicker = _languagePicker; |
356 auto blockNavigationBar(_navigationBar); | 356 UINavigationBar* blockNavigationBar = _navigationBar; |
357 [UIView animateWithDuration:kPickerAnimationDurationInSeconds | 357 [UIView animateWithDuration:kPickerAnimationDurationInSeconds |
358 animations:^{ | 358 animations:^{ |
359 blockLanguagePicker.get().frame = finalPickerFrame; | 359 blockLanguagePicker.frame = finalPickerFrame; |
360 blockNavigationBar.get().frame = finalNavigationBarFrame; | 360 blockNavigationBar.frame = finalNavigationBarFrame; |
361 }]; | 361 }]; |
362 | 362 |
363 // Add the subviews. | 363 // Add the subviews. |
364 [_languageSelectionView addSubview:_languagePicker]; | 364 [_languageSelectionView addSubview:_languagePicker]; |
365 [_languageSelectionView addSubview:_navigationBar]; | 365 [_languageSelectionView addSubview:_navigationBar]; |
366 } | 366 } |
367 | 367 |
368 - (void)removeView { | 368 - (void)removeView { |
369 [super removeView]; | 369 [super removeView]; |
370 [self dismissLanguageSelectionView]; | 370 [self dismissLanguageSelectionView]; |
371 } | 371 } |
372 | 372 |
373 - (void)detachView { | 373 - (void)detachView { |
374 [super detachView]; | 374 [super detachView]; |
375 [self dismissLanguageSelectionView]; | 375 [self dismissLanguageSelectionView]; |
376 } | 376 } |
377 | 377 |
378 @end | 378 @end |
OLD | NEW |