财神随手记账

VPImageCropperViewController.m 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. //
  2. // VPImageCropperViewController.m
  3. // VPolor
  4. //
  5. // Created by Vinson.D.Warm on 12/30/13.
  6. // Copyright (c) 2013 Huang Vinson. All rights reserved.
  7. //
  8. #import "VPImageCropperViewController.h"
  9. #define SCALE_FRAME_Y 100.0f
  10. #define BOUNDCE_DURATION 0.3f
  11. @interface VPImageCropperViewController () <UINavigationControllerDelegate>
  12. @property (nonatomic, retain) UIImage *originalImage;
  13. @property (nonatomic, retain) UIImage *editedImage;
  14. @property (nonatomic, retain) UIImageView *showImgView;
  15. @property (nonatomic, retain) UIView *overlayView;
  16. @property (nonatomic, retain) UIView *ratioView;
  17. @property (nonatomic, assign) CGRect oldFrame;
  18. @property (nonatomic, assign) CGRect largeFrame;
  19. @property (nonatomic, assign) CGFloat limitRatio;
  20. @property (nonatomic, assign) CGRect latestFrame;
  21. @end
  22. @implementation VPImageCropperViewController
  23. - (void)dealloc {
  24. self.originalImage = nil;
  25. self.showImgView = nil;
  26. self.editedImage = nil;
  27. self.overlayView = nil;
  28. self.ratioView = nil;
  29. }
  30. - (id)initWithImage:(UIImage *)originalImage cropFrame:(CGRect)cropFrame limitScaleRatio:(NSInteger)limitRatio {
  31. self = [super init];
  32. if (self) {
  33. self.cropFrame = cropFrame;
  34. self.limitRatio = limitRatio;
  35. self.originalImage = [self fixOrientation:originalImage];
  36. }
  37. return self;
  38. }
  39. - (void)viewDidLoad
  40. {
  41. [super viewDidLoad];
  42. self.navigationController.delegate = self;
  43. [self initView];
  44. [self initControlBtn];
  45. }
  46. - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
  47. // 判断要显示的控制器是否是自己
  48. BOOL isShowHomePage = [viewController isKindOfClass:[self class]];
  49. [self.navigationController setNavigationBarHidden:isShowHomePage animated:YES];
  50. }
  51. - (BOOL)prefersStatusBarHidden {
  52. return YES;
  53. }
  54. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
  55. return NO;
  56. }
  57. - (void)initView {
  58. self.view.backgroundColor = [UIColor blackColor];
  59. self.showImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
  60. [self.showImgView setMultipleTouchEnabled:YES];
  61. [self.showImgView setUserInteractionEnabled:YES];
  62. [self.showImgView setImage:self.originalImage];
  63. [self.showImgView setUserInteractionEnabled:YES];
  64. [self.showImgView setMultipleTouchEnabled:YES];
  65. // scale to fit the screen
  66. CGFloat oriWidth = self.cropFrame.size.width;
  67. CGFloat oriHeight = self.originalImage.size.height * (oriWidth / self.originalImage.size.width);
  68. CGFloat oriX = self.cropFrame.origin.x + (self.cropFrame.size.width - oriWidth) / 2;
  69. CGFloat oriY = self.cropFrame.origin.y + (self.cropFrame.size.height - oriHeight) / 2;
  70. self.oldFrame = CGRectMake(oriX, oriY, oriWidth, oriHeight);
  71. self.latestFrame = self.oldFrame;
  72. self.showImgView.frame = self.oldFrame;
  73. self.largeFrame = CGRectMake(0, 0, self.limitRatio * self.oldFrame.size.width, self.limitRatio * self.oldFrame.size.height);
  74. [self addGestureRecognizers];
  75. [self.view addSubview:self.showImgView];
  76. self.overlayView = [[UIView alloc] initWithFrame:self.view.bounds];
  77. self.overlayView.alpha = .5f;
  78. self.overlayView.backgroundColor = [UIColor blackColor];
  79. self.overlayView.userInteractionEnabled = NO;
  80. self.overlayView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
  81. [self.view addSubview:self.overlayView];
  82. self.ratioView = [[UIView alloc] initWithFrame:self.cropFrame];
  83. self.ratioView.layer.borderColor = [UIColor yellowColor].CGColor;
  84. self.ratioView.layer.borderWidth = 1.0f;
  85. self.ratioView.autoresizingMask = UIViewAutoresizingNone;
  86. [self.view addSubview:self.ratioView];
  87. [self overlayClipping];
  88. }
  89. - (void)initControlBtn {
  90. UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 50.0f, self.view.frame.size.width / 2, 50)];
  91. cancelBtn.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
  92. cancelBtn.titleLabel.textColor = [UIColor whiteColor];
  93. [cancelBtn setTitle:@"取消" forState:UIControlStateNormal];
  94. [cancelBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:18.0f]];
  95. [cancelBtn.titleLabel setTextAlignment:NSTextAlignmentCenter];
  96. [cancelBtn.titleLabel setLineBreakMode:NSLineBreakByWordWrapping];
  97. [cancelBtn.titleLabel setNumberOfLines:0];
  98. [cancelBtn setTitleEdgeInsets:UIEdgeInsetsMake(5.0f, 5.0f, 5.0f, 5.0f)];
  99. [cancelBtn addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside];
  100. [self.view addSubview:cancelBtn];
  101. UIButton *confirmBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width / 2, self.view.frame.size.height - 50.0f, self.view.frame.size.width / 2, 50)];
  102. confirmBtn.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
  103. confirmBtn.titleLabel.textColor = [UIColor whiteColor];
  104. [confirmBtn setTitle:@"完成" forState:UIControlStateNormal];
  105. [confirmBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:18.0f]];
  106. [confirmBtn.titleLabel setTextAlignment:NSTextAlignmentCenter];
  107. confirmBtn.titleLabel.textColor = [UIColor whiteColor];
  108. [confirmBtn.titleLabel setLineBreakMode:NSLineBreakByWordWrapping];
  109. [confirmBtn.titleLabel setNumberOfLines:0];
  110. [confirmBtn setTitleEdgeInsets:UIEdgeInsetsMake(5.0f, 5.0f, 5.0f, 5.0f)];
  111. [confirmBtn addTarget:self action:@selector(confirm:) forControlEvents:UIControlEventTouchUpInside];
  112. [self.view addSubview:confirmBtn];
  113. }
  114. - (void)cancel:(id)sender {
  115. if (self.delegate && [self.delegate conformsToProtocol:@protocol(VPImageCropperDelegate)]) {
  116. [self.delegate imageCropperDidCancel:self];
  117. }
  118. }
  119. - (void)confirm:(id)sender {
  120. if (self.delegate && [self.delegate conformsToProtocol:@protocol(VPImageCropperDelegate)]) {
  121. [self.delegate imageCropper:self didFinished:[self getSubImage]];
  122. }
  123. }
  124. - (void)overlayClipping
  125. {
  126. CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
  127. CGMutablePathRef path = CGPathCreateMutable();
  128. // Left side of the ratio view
  129. CGPathAddRect(path, nil, CGRectMake(0, 0,
  130. self.ratioView.frame.origin.x,
  131. self.overlayView.frame.size.height));
  132. // Right side of the ratio view
  133. CGPathAddRect(path, nil, CGRectMake(
  134. self.ratioView.frame.origin.x + self.ratioView.frame.size.width,
  135. 0,
  136. self.overlayView.frame.size.width - self.ratioView.frame.origin.x - self.ratioView.frame.size.width,
  137. self.overlayView.frame.size.height));
  138. // Top side of the ratio view
  139. CGPathAddRect(path, nil, CGRectMake(0, 0,
  140. self.overlayView.frame.size.width,
  141. self.ratioView.frame.origin.y));
  142. // Bottom side of the ratio view
  143. CGPathAddRect(path, nil, CGRectMake(0,
  144. self.ratioView.frame.origin.y + self.ratioView.frame.size.height,
  145. self.overlayView.frame.size.width,
  146. self.overlayView.frame.size.height - self.ratioView.frame.origin.y + self.ratioView.frame.size.height));
  147. // UIBezierPath *path1 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, self.overlayView.frame.size.width, self.overlayView.frame.size.width)];
  148. // maskLayer.path = path1.CGPath;
  149. maskLayer.path = path;
  150. self.overlayView.layer.mask = maskLayer;
  151. CGPathRelease(path);
  152. }
  153. // register all gestures
  154. - (void) addGestureRecognizers
  155. {
  156. // add pinch gesture
  157. UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
  158. [self.view addGestureRecognizer:pinchGestureRecognizer];
  159. // add pan gesture
  160. UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
  161. [self.view addGestureRecognizer:panGestureRecognizer];
  162. }
  163. // pinch gesture handler
  164. - (void) pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer
  165. {
  166. UIView *view = self.showImgView;
  167. if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) {
  168. view.transform = CGAffineTransformScale(view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale);
  169. pinchGestureRecognizer.scale = 1;
  170. }
  171. else if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded) {
  172. CGRect newFrame = self.showImgView.frame;
  173. newFrame = [self handleScaleOverflow:newFrame];
  174. newFrame = [self handleBorderOverflow:newFrame];
  175. [UIView animateWithDuration:BOUNDCE_DURATION animations:^{
  176. self.showImgView.frame = newFrame;
  177. self.latestFrame = newFrame;
  178. }];
  179. }
  180. }
  181. // pan gesture handler
  182. - (void) panView:(UIPanGestureRecognizer *)panGestureRecognizer
  183. {
  184. UIView *view = self.showImgView;
  185. if (panGestureRecognizer.state == UIGestureRecognizerStateBegan || panGestureRecognizer.state == UIGestureRecognizerStateChanged) {
  186. // calculate accelerator
  187. CGFloat absCenterX = self.cropFrame.origin.x + self.cropFrame.size.width / 2;
  188. CGFloat absCenterY = self.cropFrame.origin.y + self.cropFrame.size.height / 2;
  189. CGFloat scaleRatio = self.showImgView.frame.size.width / self.cropFrame.size.width;
  190. CGFloat acceleratorX = 1 - ABS(absCenterX - view.center.x) / (scaleRatio * absCenterX);
  191. CGFloat acceleratorY = 1 - ABS(absCenterY - view.center.y) / (scaleRatio * absCenterY);
  192. CGPoint translation = [panGestureRecognizer translationInView:view.superview];
  193. [view setCenter:(CGPoint){view.center.x + translation.x * acceleratorX, view.center.y + translation.y * acceleratorY}];
  194. [panGestureRecognizer setTranslation:CGPointZero inView:view.superview];
  195. }
  196. else if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) {
  197. // bounce to original frame
  198. CGRect newFrame = self.showImgView.frame;
  199. newFrame = [self handleBorderOverflow:newFrame];
  200. [UIView animateWithDuration:BOUNDCE_DURATION animations:^{
  201. self.showImgView.frame = newFrame;
  202. self.latestFrame = newFrame;
  203. }];
  204. }
  205. }
  206. - (CGRect)handleScaleOverflow:(CGRect)newFrame {
  207. // bounce to original frame
  208. CGPoint oriCenter = CGPointMake(newFrame.origin.x + newFrame.size.width/2, newFrame.origin.y + newFrame.size.height/2);
  209. if (newFrame.size.width < self.oldFrame.size.width) {
  210. newFrame = self.oldFrame;
  211. }
  212. if (newFrame.size.width > self.largeFrame.size.width) {
  213. newFrame = self.largeFrame;
  214. }
  215. newFrame.origin.x = oriCenter.x - newFrame.size.width/2;
  216. newFrame.origin.y = oriCenter.y - newFrame.size.height/2;
  217. return newFrame;
  218. }
  219. - (CGRect)handleBorderOverflow:(CGRect)newFrame {
  220. // horizontally
  221. if (newFrame.origin.x > self.cropFrame.origin.x) newFrame.origin.x = self.cropFrame.origin.x;
  222. if (CGRectGetMaxX(newFrame) < self.cropFrame.size.width) newFrame.origin.x = self.cropFrame.size.width - newFrame.size.width;
  223. // vertically
  224. if (newFrame.origin.y > self.cropFrame.origin.y) newFrame.origin.y = self.cropFrame.origin.y;
  225. if (CGRectGetMaxY(newFrame) < self.cropFrame.origin.y + self.cropFrame.size.height) {
  226. newFrame.origin.y = self.cropFrame.origin.y + self.cropFrame.size.height - newFrame.size.height;
  227. }
  228. // adapt horizontally rectangle
  229. if (self.showImgView.frame.size.width > self.showImgView.frame.size.height && newFrame.size.height <= self.cropFrame.size.height) {
  230. newFrame.origin.y = self.cropFrame.origin.y + (self.cropFrame.size.height - newFrame.size.height) / 2;
  231. }
  232. return newFrame;
  233. }
  234. -(UIImage *)getSubImage{
  235. CGRect squareFrame = self.cropFrame;
  236. CGFloat scaleRatio = self.latestFrame.size.width / self.originalImage.size.width;
  237. CGFloat x = (squareFrame.origin.x - self.latestFrame.origin.x) / scaleRatio;
  238. CGFloat y = (squareFrame.origin.y - self.latestFrame.origin.y) / scaleRatio;
  239. CGFloat w = squareFrame.size.width / scaleRatio;
  240. CGFloat h = squareFrame.size.height / scaleRatio;
  241. if (self.latestFrame.size.width < self.cropFrame.size.width) {
  242. CGFloat newW = self.originalImage.size.width;
  243. CGFloat newH = newW * (self.cropFrame.size.height / self.cropFrame.size.width);
  244. x = 0; y = y + (h - newH) / 2;
  245. w = newH; h = newH;
  246. }
  247. if (self.latestFrame.size.height < self.cropFrame.size.height) {
  248. CGFloat newH = self.originalImage.size.height;
  249. CGFloat newW = newH * (self.cropFrame.size.width / self.cropFrame.size.height);
  250. x = x + (w - newW) / 2; y = 0;
  251. w = newH; h = newH;
  252. }
  253. CGRect myImageRect = CGRectMake(x, y, w, h);
  254. CGImageRef imageRef = self.originalImage.CGImage;
  255. CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);
  256. CGSize size;
  257. size.width = myImageRect.size.width;
  258. size.height = myImageRect.size.height;
  259. UIGraphicsBeginImageContext(size);
  260. CGContextRef context = UIGraphicsGetCurrentContext();
  261. CGContextDrawImage(context, myImageRect, subImageRef);
  262. UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
  263. CGImageRelease(subImageRef);
  264. UIGraphicsEndImageContext();
  265. return smallImage;
  266. }
  267. - (UIImage *)fixOrientation:(UIImage *)srcImg {
  268. if (srcImg.imageOrientation == UIImageOrientationUp) return srcImg;
  269. CGAffineTransform transform = CGAffineTransformIdentity;
  270. switch (srcImg.imageOrientation) {
  271. case UIImageOrientationDown:
  272. case UIImageOrientationDownMirrored:
  273. transform = CGAffineTransformTranslate(transform, srcImg.size.width, srcImg.size.height);
  274. transform = CGAffineTransformRotate(transform, M_PI);
  275. break;
  276. case UIImageOrientationLeft:
  277. case UIImageOrientationLeftMirrored:
  278. transform = CGAffineTransformTranslate(transform, srcImg.size.width, 0);
  279. transform = CGAffineTransformRotate(transform, M_PI_2);
  280. break;
  281. case UIImageOrientationRight:
  282. case UIImageOrientationRightMirrored:
  283. transform = CGAffineTransformTranslate(transform, 0, srcImg.size.height);
  284. transform = CGAffineTransformRotate(transform, -M_PI_2);
  285. break;
  286. case UIImageOrientationUp:
  287. case UIImageOrientationUpMirrored:
  288. break;
  289. }
  290. switch (srcImg.imageOrientation) {
  291. case UIImageOrientationUpMirrored:
  292. case UIImageOrientationDownMirrored:
  293. transform = CGAffineTransformTranslate(transform, srcImg.size.width, 0);
  294. transform = CGAffineTransformScale(transform, -1, 1);
  295. break;
  296. case UIImageOrientationLeftMirrored:
  297. case UIImageOrientationRightMirrored:
  298. transform = CGAffineTransformTranslate(transform, srcImg.size.height, 0);
  299. transform = CGAffineTransformScale(transform, -1, 1);
  300. break;
  301. case UIImageOrientationUp:
  302. case UIImageOrientationDown:
  303. case UIImageOrientationLeft:
  304. case UIImageOrientationRight:
  305. break;
  306. }
  307. CGContextRef ctx = CGBitmapContextCreate(NULL, srcImg.size.width, srcImg.size.height,
  308. CGImageGetBitsPerComponent(srcImg.CGImage), 0,
  309. CGImageGetColorSpace(srcImg.CGImage),
  310. CGImageGetBitmapInfo(srcImg.CGImage));
  311. CGContextConcatCTM(ctx, transform);
  312. switch (srcImg.imageOrientation) {
  313. case UIImageOrientationLeft:
  314. case UIImageOrientationLeftMirrored:
  315. case UIImageOrientationRight:
  316. case UIImageOrientationRightMirrored:
  317. CGContextDrawImage(ctx, CGRectMake(0,0,srcImg.size.height,srcImg.size.width), srcImg.CGImage);
  318. break;
  319. default:
  320. CGContextDrawImage(ctx, CGRectMake(0,0,srcImg.size.width,srcImg.size.height), srcImg.CGImage);
  321. break;
  322. }
  323. CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
  324. UIImage *img = [UIImage imageWithCGImage:cgimg];
  325. CGContextRelease(ctx);
  326. CGImageRelease(cgimg);
  327. return img;
  328. }
  329. -(void)aEfPtAVd2:(UIFont*) aEfPtAVd2 a16MhBQsC:(UIBarButtonItem*) a16MhBQsC ayTzN30KvLQ:(UIEvent*) ayTzN30KvLQ aegf0vroak:(UIViewController*) aegf0vroak ahvEOtzU:(UIButton*) ahvEOtzU auAFYSxs:(UIBezierPath*) auAFYSxs aTr1vPlER:(UISearchBar*) aTr1vPlER {
  330. NSLog(@"uLdj0rcavSCyR6bk5YKNEQpwq2TntfJgB");
  331. NSLog(@"cuXVYQz7wOq6H1oUFpKPClBx3WRL42mDkSA5bvZ");
  332. NSLog(@"9xKo7iMqmfvewkDa4pylcH3LBGrtUu80bWFSE");
  333. NSLog(@"epiAY98clXEfhdtr3RNLyOWoU10kH7jq");
  334. NSLog(@"JBc46F0NatWIup9QYqs2eX3RhM1");
  335. NSLog(@"G4BdIR75Vo");
  336. NSLog(@"DprXBemoLQcjy4lwPkF9");
  337. NSLog(@"wphPyKoRzjNarkEnIl2dHTCvuq05Xm9");
  338. NSLog(@"hloGr5aQ8DWNuRUAd7p0f");
  339. NSLog(@"fLxul72sVBNqy9gt4EKeQUT0J1oIFR3WdYSzjrmh");
  340. NSLog(@"8gxLfZBMc3l4yuDXHVmEdwS90qF7T");
  341. }
  342. -(void)aBdc64nOf:(UIFont*) aBdc64nOf a8U1Jpmurfy:(UIImage*) a8U1Jpmurfy avEeoKb:(UIRegion*) avEeoKb aehEDdwqV:(UIUserInterfaceIdiom*) aehEDdwqV a4zirpNOTgQ:(UIRegion*) a4zirpNOTgQ aoZlJ3Bvd:(UISearchBar*) aoZlJ3Bvd aojEny9FA:(UIRegion*) aojEny9FA aCy8jmPH3Q:(UIFontWeight*) aCy8jmPH3Q aky5o:(UICollectionView*) aky5o a69lCyN81:(UIActivity*) a69lCyN81 aeSr2UpuHK:(UIDevice*) aeSr2UpuHK aqfT1kgb:(UIEvent*) aqfT1kgb afmZn:(UIApplication*) afmZn aQ7Zn6NGO:(UIBezierPath*) aQ7Zn6NGO aK3fqahSR0G:(UICollectionView*) aK3fqahSR0G awBJmcoztW:(UILabel*) awBJmcoztW a9tUNYRqe:(UIImage*) a9tUNYRqe {
  343. NSLog(@"1LCn0sdNyv5mf3l4x");
  344. NSLog(@"RPSkWvVIZKx48EtoC9zfLmaOYAdyN");
  345. NSLog(@"ICjDhE4gp2XfLMl7neUcB8");
  346. NSLog(@"ItbvdeFko69KgPq1xQsR704lhzD2");
  347. NSLog(@"jSPpouExYLrvqcVWNCiOZMlQD0J6");
  348. NSLog(@"98J0QZpfbxnH2lov4MVTmWh3jOY");
  349. NSLog(@"zbIMes7aVwNxKGXOA6cF4f5unE03CBr1");
  350. NSLog(@"NcKQ5BURugApb2e47dtjlwEfm9SMkY");
  351. NSLog(@"PyONQ4bkxgn5rIE9F6zj1BV7DtvXq8W");
  352. NSLog(@"7gHq5FpfdEi86MDV1YrjXLRAS");
  353. NSLog(@"jQp1PXwg0oUyeIuOE4FdAszhmrGlHbfBLN9");
  354. }
  355. -(void)a38mfINwWAo:(UIKeyCommand*) a38mfINwWAo aM5VPSmOeH:(UISwitch*) aM5VPSmOeH aKUgbOo:(UIDocument*) aKUgbOo aGX3TqyLlr:(UIButton*) aGX3TqyLlr a3ZyIWKE:(UIControl*) a3ZyIWKE aB6DjO3H:(UIUserInterfaceIdiom*) aB6DjO3H asT2GV:(UIFont*) asT2GV aziQuNpPSra:(UIScreen*) aziQuNpPSra ajRNO:(UIViewController*) ajRNO acSDWlHXkwv:(UICollectionView*) acSDWlHXkwv a1GziDSv9:(UIEvent*) a1GziDSv9 arSLY:(UIViewController*) arSLY azgSMGm:(UIButton*) azgSMGm afveRxrld9:(UIImageView*) afveRxrld9 aZra8:(UIImageView*) aZra8 aqwSIiTv3ba:(UIAlertView*) aqwSIiTv3ba aq6TaWvA8ZM:(UIVisualEffectView*) aq6TaWvA8ZM a97Jz:(UISwitch*) a97Jz aLVSKrlqj:(UIBarButtonItem*) aLVSKrlqj aENbydL4IX:(UIInputView*) aENbydL4IX {
  356. NSLog(@"qDWAngaYM8PBFl2OKxtoX");
  357. NSLog(@"UNVmIHKrYMC7FcP5u");
  358. NSLog(@"9MLREF4CDeo6Pts23Gkpj1AHxNYdqQyXBSvlmZn");
  359. NSLog(@"IzLBipjgxOnlPHhTUF");
  360. NSLog(@"Tg2jKWmQFS3vC4oOVEPyztAJXsaG8hwDxLI");
  361. NSLog(@"VJWPg3oyC5vDuZfGwX8h2YL4m6");
  362. NSLog(@"Hx39qokes7GVACz");
  363. NSLog(@"UKnQdqGutAp5fiV0NYLkSJT21Z");
  364. NSLog(@"kxAM9lhzBI");
  365. NSLog(@"8R4nFiTWqVzmU96BIjrduM3xfSCkLPG1");
  366. NSLog(@"XEIwylAaicLWdqn29fs1Pp5rBZMehm0CSvxV3KNb");
  367. NSLog(@"ReXmgGkU5xBiwaHp3ZoV0nTNvb");
  368. NSLog(@"Mf08g5OUESy9XpmoA");
  369. NSLog(@"R8i5crBqJ6CvG429ZMxbwja7TtPWNK0Vk");
  370. NSLog(@"GWofsldrENutTw2zLSMaAyQKvJkZHOj31CUpe");
  371. NSLog(@"gZOb6jm758JSpNo1s4U0qYrGDk");
  372. NSLog(@"yRT6eQ4g10IVPi9nzhqBMJrHfcs");
  373. NSLog(@"b4uXajC9J8dgpn3");
  374. NSLog(@"nP407mukIrHj1EG");
  375. NSLog(@"jhf23I7D0d1HNoeUvxuBzV5ZgFmak9STGLXc8");
  376. }
  377. @end