這是一個感人的故事,故事是這樣的:
- 男孩(動情的):你是我最愛的女孩。。。
- 女孩(不屑的):切~
- 男孩(堅定地):不信你看!
男孩拿出iPhone,開啟一個APP,讓女孩掃自己的胸膛。幾秒後,手機裡出現女孩的照片!!!
- 男孩(深情的):這就是我心中最愛的女孩。。。
- 女孩(感動的):你麻痺你越來越會撩了?
然而,事實是這樣的:
一個屌絲菜逼程式設計師要做二維碼掃描功能,但是他不會,於是他急中生智在網上下載了一個demo,demo完美無bug,菜逼大喜過望,於是幻想著假如自己有女票的話。。。於是便誕生了上面那個感人的愛情故事,沒錯那個菜逼就是我?
其實,原理是這樣的:
用UIImagePickerController
選取心愛女孩的照片並儲存到單例中,然後開啟二維碼掃描介面,10秒後跳轉到以心愛女孩為背景的單純介面。
撩妹步驟分析:
- 將心愛女孩的照片弄到手(最好是好看點的。。。)
- 開啟Xcode
- 複製程式碼
- 貼上程式碼
- 真機除錯
- 關閉Xcode
- 開撩
PS:一步一個腳印,心急吃不了熱豆腐
撩妹重難點分析
- 開啟相簿選取圖片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// 注意代理 @interface ViewController () /** 選取心愛girl的照片 */ - (void)chooseLoveGirl{ // 選取照片 UIImagePickerController * ipc = [[UIImagePickerController alloc]init]; // 設定委託 ipc.delegate = self; // 設定允許編輯 ipc.allowsEditing = YES; // 設定指定型別的圖片格式 ipc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; // UIImagePickerControllerSourceTypePhotoLibrary, 照片 // UIImagePickerControllerSourceTypeCamera, 相機 // UIImagePickerControllerSourceTypeSavedPhotosAlbum 相簿 // 設定圖片來源,模擬器不支援相機 ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; // 顯示UIImagePickerController [self presentViewController:ipc animated:YES completion:nil]; } // 選取照片成功後回撥 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ NSLog(@"%@",info); // 獲取原始圖片 UIImage * originalImage = info[UIImagePickerControllerOriginalImage]; // 獲取編輯圖片 UIImage * editImage = info[UIImagePickerControllerEditedImage]; // 將原始圖片顯示到UIImageView上 _imageView.image = originalImage; // 將編輯後的圖片放進去 _imageView.image = editImage; // 將模態顯示的檢視控制器消失 [picker dismissViewControllerAnimated:YES completion:nil]; } // 取消選取圖片 - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ [picker dismissViewControllerAnimated:YES completion:nil]; } |
2.二維碼掃描
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
- (void)setupCamera { // Device _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // Input _input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; // Output _output = [[AVCaptureMetadataOutput alloc]init]; [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; // Session _session = [[AVCaptureSession alloc]init]; [_session setSessionPreset:AVCaptureSessionPresetHigh]; if ([_session canAddInput:self.input]) { [_session addInput:self.input]; } if ([_session canAddOutput:self.output]) { [_session addOutput:self.output]; } // 條碼型別 AVMetadataObjectTypeQRCode _output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode]; dispatch_async(dispatch_get_main_queue(), ^{ // Preview _preview =[AVCaptureVideoPreviewLayer layerWithSession:self.session]; _preview.videoGravity = AVLayerVideoGravityResizeAspectFill; _preview.frame =CGRectMake(20,94,screenWidth-40,280); [self.view.layer insertSublayer:self.preview atIndex:0]; // Start [_session startRunning]; }); } #pragma mark AVCaptureMetadataOutputObjectsDelegate - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { NSString *stringValue; if ([metadataObjects count] >0) { AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0]; stringValue = metadataObject.stringValue; } [_session stopRunning]; [timer invalidate]; } |
程式碼拿走,妹紙我有:
撩妹原始碼
PS:若對我的程式碼有爭議,歡迎探討。畢竟,哥敲的不是程式碼,是愛情。
後記:
前提你得有個女票?
如果你沒有女票,請努力敲程式碼
如果你有女票,請一定珍惜,不要因為敲程式碼而冷落了女票(我今天已經告訴你們了:即使是敲程式碼也可以逗女票開心)
“說得就像你有女票一樣?”