2017-04-15 5 views
2

프로그래밍 방식으로 뷰 컨트롤러에서 하위 뷰로 uiview를 추가했습니다 (contentView). 프로그래밍으로 uiview에 이미지를 추가했습니다. iPad에서 앱을 실행할 때마다 이미지가 늘어납니다! iPad 화면에 맞도록 이미지를 고정 시키지만 이미지를 늘리지 않는 방법은 무엇입니까? 나는 drawInRect가 이미지를 스트레칭하고 있다는 것을 알고 있습니다. 어떻게 해결할 수 있습니까?프로그래밍 방식으로 이미지에 이미지를 맞추는 방법

UIImage *image = [UIImage imageNamed:@"menu image 2.JPG"]; 

UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

imageView.contentMode = UIViewContentModeScaleAspectFit; 

[self.contentView addSubview:imageView]; 
+2

에이 한 줄의 코드를 추가하세요? '[UIImageView alloc] initWithImage : [UIImage imageNamed : @ "메뉴 이미지 2.JPG"]];'이것은 모두 필요합니다. 이것에 대한 새로운 이미지 컨텍스트를 만드는 것은 과도한 것처럼 보입니다. – Losiowaty

답변

2

변경 코드 :

여기 내 코드입니다. contentModeUIViewContentMode입니다.

기본값은 종횡비를 유지하지 않고 이미지를 늘리는 UIViewContentModeScaleToFill입니다. 나는 그것이 문제의 원인이되는 변화하는 종횡비라고 가정하고있다.

  1. UIViewContentModeScaleAspectFit : 이미지를 확장하지만, 가로 세로 비율을 유지하려면

    , 당신은 두 가지 옵션이 있습니다이 어떤 내용을 클립보기를 채우기 위해 스케일링 이미지를 보여 주지만되지 않습니다 (있는 경우 화면 비율이보기 크기와 일치하지 않을 경우 가로 또는 세로 밴드가 표시됨)

  2. UIViewContentModeScaleAspectFill :이 옵션을 사용하면 이미지없이 모든보기가 채워집니다. 이미지 비율이보기 비율과 일치하지 않습니다. (덕분에

    UIImage *image = [UIImage imageNamed:@"menu image 2.JPG"]; 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
    imageView.contentMode = UIViewContentModeScaleAspectFill; 
    ... 
    

    당신은 더 이상 작동이 드로잉 사용자 정의 컨텍스트를 사용할 필요가 없습니다 :

은 다음 구문을 사용 오브젝티브 C에서 이미지보기에 contentMode을 설정하려면 이것에 대해 나에게 묻는 Losiowaty).

2

있는 UIImageView 이미지 레이아웃이 뷰의 컨텍스트에서 처리하는 방법을 결정 contentMode라는 속성이 다음과 같이

UIGraphicsBeginImageContextWithOptions(self.contentView.bounds.size, self.contentView.opaque, 0.0); 

[[UIImage imageNamed:@"menu image 2.JPG"] drawInRect:self.contentView.bounds]; 

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 

[self.contentView addSubview:imageView]; 
+1

OP가 이미 사용자 정의 컨텍스트에서 이미지의 이미지를 확장하여 생성 한 경우이 방법이 유용할까요? – Losiowaty

+1

좋은 점, 언급하는 것을 잊어 버렸습니다. OP가 사용자 정의 컨텍스트 드로잉을 대체 할 수 있다고 생각합니다. 이미지를 인스턴스화하는 방법을 반영하여 게시물을 업데이트합니다. +1 – Yasir

+0

알겠습니다. 그러나 둘 다 작동하지 않습니다.'Aspect fit'은 수직 밴드를 보여 주며'Aspect Fill'은 여러분이 말한 것처럼 내용을 클립합니다. 가장 좋은 해결책은 프로그래밍 방식으로 수행되는 Trailing, Leading, Top 및 Bottom 레이아웃 제약 조건 인 NSLayout 제약 조건이라고 생각합니다. 어떤 생각을 어떻게 프로그래밍 방식으로합니까? 나는 Objective-C에 익숙하지 않다. 그래서 나는 도움에 감사한다. – TheProgrammer96

0

너의 self.contentView.bounds이 너의 메뉴 이미지와 같은 종횡비를 가지고 있지 않나. 2.JPG. 실험을 위해서는 메뉴 이미지 2.JPG의 해상도를보십시오. 예를 들어 300x150이면 가로 세로 비율은 (300/150 = 2 : 1)입니다. self.contentView.bounds를이 종횡비로 설정하고 이미지를 그리고 결과를 확인합니다. 스트레칭되지 않습니다.

-1

같은 복잡한 이미지 assignement에 대한 이유가 프로젝트

yourImage .contentMode = UIViewContentModeScaleAspectFit;