iOS 는 그림 확대 와 길 게 누 르 면 그림 을 저장 하 는 예제 를 실현 합 니 다.

프로필
실명 인증 으로 신분증 을 올 리 거나 은행 카드 를 귀속 시 키 는 등 사업 에서 만 날 수 밖 에 없다.실제 작업 에서 사진 을 올 리 는 것 과 관련 될 수 있 습 니 다.페이지 레이아웃 을 할 때 그림 이 한 장 이 아 닐 수도 있 습 니 다.구조의 미관 등 요 소 를 고려 하여 그림 을 표시 하 는 위치 가 작 아 졌 습 니 다.올 린 그림 이 뚜렷 한 지,내용 이 완전 한 지 확인 하려 면 크게 놓 아야 실현 할 수 있 습 니 다.다음은 제 가 포장 한 유형 을 공유 하 겠 습 니 다.그림 의 크기 조정 기능 을 완벽 하 게 실현 하 였 습 니 다.
또한 이러한 박문 들 은 제 가 일상적으로 개발 한 기술 총화 에서 비롯 된 것 입 니 다.시간 이 허락 되 는 상황 에서 저 는 기술 점 에 대해 iOS,Android 두 가지 버 전 을 공유 하고 여러분 이 참고 할 수 있 도록 demo 를 첨부 하 겠 습 니 다.만약 에 다른 기술 점 이 필요 하 다 면 글 뒤에 댓 글 을 남 길 수 있 습 니 다.저 는 최선 을 다 해 여러분 을 도 울 것 입 니 다.
2.사고 분석 실현
  • UIImageView 에 제스처 추가
  • NSObject 를 계승 하 는 FBYImageZoom 클래스
  • 출입 하 는 UIImageView
  • 를 수신 하 는 함 수 를 작성 합 니 다.
  • 들 어 오 는 UIImageView 에 따라 Window 에 다시 그립 니 다
  • 확대 후 배경 보기 의 색상 과 투명 도 를 추가 합 니 다
  • 애니메이션 확대 전시 ImageView
  • ImageView 원본 사 이 즈 를 복원 하 는 tap 클릭 이벤트 추가
  • 완료 후 배경 보기 삭제
  • 3.소스 코드 분석 실현
    실현 사고 분석 에 따라 한 걸음 한 걸음 인 코딩 을 실현 한다.
    1.UIImageView 에 제스처 추가
    
    self.myImageView = [[UIImageView alloc]initWithFrame:CGRectMake(50, 150, SCREEN_WIDTH-100, SCREEN_WIDTH-100)];
    self.myImageView.image = [UIImage imageNamed:@"bankcard"];
    //      
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scanBigImageClick:)];
    [_myImageView addGestureRecognizer:tapGestureRecognizer];
    [_myImageView setUserInteractionEnabled:YES];
    [self.view addSubview:_myImageView];
    
    2.NSObject 를 계승 하 는 FBYImageZoom 클래스 패키지
    
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    @interface FBYImageZoom : NSObject
    @end
    
    
    3.드 나 드 는 UIImageView 를 받 을 수 있 는 함 수 를 작성
    
    /**
     * @param contentImageview      imageView
     */
    +(void)ImageZoomWithImageView:(UIImageView *)contentImageview;
    
    4.들 어 오 는 UIImageView 에 따라 Window 에 다시 그립 니 다.
    
    +(void)ImageZoomWithImageView:(UIImageView *)contentImageview{  
      UIWindow *window = [UIApplication sharedApplication].keyWindow;
      [self scanBigImageWithImage:contentImageview.image frame:[contentImageview convertRect:contentImageview.bounds toView:window]];
    }
    
    5.확대 후 배경 보기 의 색상 과 투명도 추가
    
    //    
      UIWindow *window = [UIApplication sharedApplication].keyWindow;
      //  
      UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
      [backgroundView setBackgroundColor:[UIColor colorWithRed:107/255.0 green:107/255.0 blue:99/255.0 alpha:0.6]];
    6.이미지 뷰 확대 애니메이션 으로 보 여주 기
    
      //        ImageView
      [UIView animateWithDuration:0.4 animations:^{
        CGFloat y,width,height;
        y = ([UIScreen mainScreen].bounds.size.height - image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width) * 0.5;
        //       
        width = [UIScreen mainScreen].bounds.size.width;
        //            
        height = image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width;
        [imageView setFrame:CGRectMake(0, y, width, height)];
        //  !        
        [backgroundView setAlpha:1];
      } completion:^(BOOL finished) {
        
      }];
    
    7.ImageView 원본 사 이 즈 를 복원 하 는 tap 클릭 이벤트 추가
    
    //             ->              
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideImageView:)];
    [backgroundView addGestureRecognizer:tapGestureRecognizer];
    
    /**
     *   imageView    
     */
    +(void)hideImageView:(UITapGestureRecognizer *)tap{
      UIView *backgroundView = tap.view;
      //  imageview
      UIImageView *imageView = [tap.view viewWithTag:1024];
      //  
      [UIView animateWithDuration:0.4 animations:^{
        [imageView setFrame:oldframe];
        [backgroundView setAlpha:0];
      } completion:^(BOOL finished) {
        [backgroundView removeFromSuperview];
      }];
    }
    
    
    8.완료 후 배경 보기 삭제
    
    //     ->       
    [backgroundView removeFromSuperview];
    
    4.프로젝트 실제 사용
    1.패키지 클래스 FBYImageZoom 도입
    
    #import "FBYImageZoom.h"
    2.UIImageView 에 제스처 추가
    
    //      
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scanBigImageClick:)];
    3.패키지 클래스 함수 호출
    
    //        
    -(void)scanBigImageClick:(UITapGestureRecognizer *)tap{
      NSLog(@"    ");
      UIImageView *clickedImageView = (UIImageView *)tap.view;
      [FBYImageZoom ImageZoomWithImageView:clickedImageView];
    }
    자,여기 서 사진 을 눌 러 서 전체 화면 으로 확대 하면 됩 니 다.
    4.그림 을 길 게 눌 러 저장
    또한 긴 버튼 으로 그림 을 저장 하 는 기능 을 실현 하 는데 이 기능 은 매우 간단 하 다
    우선 긴 제스처 를 늘 려 주세요.
    
      //      
      UILongPressGestureRecognizer *longTap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(imglongTapClick:)];
      //    
      [_myImageView addGestureRecognizer:longTap];
    그리고 제스처 로 경고 보 기 를 길 게 꺼 내 확인 합 니 다.
    
    -(void)imglongTapClick:(UILongPressGestureRecognizer*)gesture
    {  
      if(gesture.state==UIGestureRecognizerStateBegan)    
      {    
        UIAlertController *alertControl = [UIAlertController alertControllerWithTitle:@"    " message:nil preferredStyle:UIAlertControllerStyleAlert];    
        UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
          
          NSLog(@"      ");
        }];
        
        UIAlertAction *confirm = [UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
          
          NSLog(@"      ");      
          //        
          UIImageWriteToSavedPhotosAlbum(self.myImageView.image,self,@selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:),nil);
          
        }];    
        [alertControl addAction:cancel];
        [alertControl addAction:confirm];    
        [self presentViewController:alertControl animated:YES completion:nil];
        
      }  
    }
    마지막 으로 그림 저장 후 리 셋
    
    - (void)imageSavedToPhotosAlbum:(UIImage*)image didFinishSavingWithError: (NSError*)error contextInfo:(id)contextInfo
    
    {
      NSString *message;  
      if(!error) {    
        message =@"       ";    
        UIAlertController *alertControl = [UIAlertController alertControllerWithTitle:@"  " message:message preferredStyle:UIAlertControllerStyleAlert];    
        UIAlertAction *action = [UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
          
        }];
        [alertControl addAction:action];    
        [self presentViewController:alertControl animated:YES completion:nil];    
      }else
        
      {
        message = [error description];      
        UIAlertController *alertControl = [UIAlertController alertControllerWithTitle:@"  " message:message preferredStyle:UIAlertControllerStyleAlert];    
        UIAlertAction *action = [UIAlertAction actionWithTitle:@"  " style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
          
        }];    
        [alertControl addAction:action];    
        [self presentViewController:alertControl animated:YES completion:nil];    
      }  
    }
    여기 서 클릭 이미지 확대 와 길 게 누 르 면 이미지 저장 기능 이 모두 실현 되 고 demo 소스 코드 는 이미github에 놓 여 있 습 니 다.
    5.프로젝트 전시

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기