2013-08-23 2 views
1

으로 변경되었습니다. Obj-C/Cocoa 프로그래밍을 처음 접했고 NSImageView에 관한 문제가 있습니다.
내 목표는 사용자가 드래그하여 이미지를 넣을 수있는 앱을 만드는 것입니다. & drop. 우리가 창보다 큰 이미지를 드롭 할 때, 그것은 이미지 크기로 창 크기를 조정, 내가을 원하지 않는다 :NSImageView의 이미지 크기가

문제는이 다음이다! .. 그게 내가 원하는거야,
나는 보였다 수 NSScrollView에 이미지 MUST 너무에만 특정 부분을 내 NSImageView을 넣어 사용자는 전체를 볼 슬라이더를 이동 (또는 단순히 창 크기를 조정)합니다

가 여기 내 XIB 계층 구조 (관련 부분)입니다 :

  • 보기
    • NSScrollView
      • 보기
        • NSImageView
      내 NSImageView의 코드에서


, 나는 (그 문제에 대해)이 있습니다

[self setImageScaling:NSScaleProportionally]; 
[self setImage:newImage]; 


참고는 : 슬라이더는 뷰가 아닌 이미지를 이동하는 것
NOTE2 : 나 이미지보다 낮은 크기로 창 크기를 조정할 수 없습니다

+0

"슬라이더가 이미지가 아닌보기를 움직이는 것처럼 보이는 것이 무엇입니까?" –

+0

위/아래로 스크롤 할 때보기가 움직이는 것을 볼 수 있으며 자동으로 기본 위치로 돌아갑니다. – Val

+0

확인. 네 문제가 뭔지 알아. NSScrollView 내부의 뷰가 충분히 크지 않다는 것을 설명하는 소리가 나에게 들린다. 'clip subviews'가 아마도 활성화되어 있지 않기 때문에 NSImageView가 그 경계 밖에서 여전히 볼 수 있습니다. 그리고 왜 스크롤 할 수 있고 원래 위치로 돌아가는 이유는 NSScrollView의 일부인 수신 거부 (bouncing) 기능입니다. 응용 프로그램을 디버그하고'yournsimageview'와'yourscrollview.view'의 크기를 확인하십시오. –

답변

4

내가 파일을 펜촉 끔찍한 혐오감을 가지고 선호 가능할 때마다 프로그래밍 방식으로 작업을 수행하므로 그다지 도움이되지는 않습니다 ...하지만 최근에 코딩 한 NSScrollview 테스트 앱의 작은 목록이 있습니다. 이 코드 청크에서 언급 된 유일한 자체 포함되지 않은 것은 window 이름입니다.이 이름은 이미 생성 된 창에 대해 NSWindow *을 참조합니다. 여기서 self은 컨트롤러 개체를 나타냅니다.

NSImage * myImage  = [NSImage imageNamed:@"myfilename.png"]; 
NSRect imageRect  = NSMakeRect(0.0,0.0,myImage.size.width,myImage.size.height); 


self.myImageView  = [[NSImageView alloc] initWithFrame:imageRect]; 
self.myImageView.bounds = imageRect; 
self.myImageView.image = myImage; 

self.myScrollView  = [[NSScrollView alloc] initWithFrame:[window.contentView frame]]; 
self.myScrollView.hasVerticalScroller = YES; 
self.myScrollView.hasHorizontalScroller = YES; 
self.myScrollView.documentView = self.myImageView; 
self.myScrollView.borderType = NSNoBorder; 
self.myScrollView.scrollerStyle = NSScrollerStyleOverlay; 

window.contentView  = self.myScrollView; 

그게 아마 당신이 찾고있는 해결책이 아니다 알고하지만 어쩌면 그것은 당신이 디버깅하는 데 도움이? 특히, 프레임, 경계 사각형 및 NSImage *을 제공하는 것 외에 내 NSImageView을 사용하여 재미있는 작업을 수행하지 않았으므로 스케일링 매개 변수 자체에 대해 걱정할 필요가 없다고 생각합니다. 사실 이미지를 최대 크기로 만들고 그 주위를 스크롤하려면 NSImageView의 프레임이 이미지와 크기가 같아서 크기를 조정할 필요가 없습니다. 어쩌면 그건 너의 문제 야 - 프레임이 너무 작습니까? NSImageView 프레임이 윈도우보다 큰 것은 괜찮습니다. 바로 스크롤 할 수 있습니다.

+0

답해 주셔서 감사합니다.하지만이 작업을 위해 Interface Builder를 사용하고 싶습니다. 그리고 내가 가지고있는 실제 코드를 사용하면 솔루션을 사용할 수 있을지 확신 할 수 없습니다. – Val

+1

인터페이스 작성기에 대해 충분히 공정하지만 희망 사항은 이것이 NSScrollView를 만드는 데 필요한 최소한의 코드라고 생각합니다. . 그리고 Interface Builder가 백그라운드에서하고있는 것과 똑같습니다. Interface Builder에서 작성한 모든 설정과 선택은 기본적으로 앱이 시작될 때 이와 같은 코드를 실행하도록 지시합니다. 따라서 코드로이 작업을 할 수있는 방법을 찾을 수 없다면 코드에 근본적인 문제가있을 수 있습니다. – Matt

+1

내가 여기있는 코드를 시도해 보는 것이 더 나을 것이라고 생각하는 또 다른 이유는 (인터페이스 빌더에 대한 내 머리 꼭대기에서 답을 알지 못한다는 사실 외에도) IB는 백만 가지의 작은 체크 박스와 설정을 가지고 있습니다 다양한 창에 묻히고, 체크하고 체크하지 않고 바로 선택하지 않으면, 예상대로 작동하지 않을 수 있습니다. 누군가가 작동하는 것으로 알려진 코드를 제공하고 그것을 붙여 넣는다면, 여전히 작동해야합니다. 앱을 깨는 것 같은 놓친 체크 박스가 있다는 것을 걱정할 필요가 없습니다. – Matt

1

내게는보기에 적절한 크기가없는 것처럼 들립니다. 수신 거부 때문에 뷰가 하위 뷰를 클립하지 않기 때문에 조금 스크롤 할 수는 있지만 원래 위치로 돌아갑니다.

  1. 확인 NSImageView가 전체 이미지를 표시 할만큼 큰 경우. 이 (새 이미지를 설정 내부의 방법) 할 정도로 큰없는 경우

    (너비와 높이에 대한 프레임 또는 경계를 확인) :

    self.myImageView.frame = NSMakeRect(0.0,0.0, self.myImageView.image.size.width, self.myImageView.image.size.height);

  2. 이의 크기를 조정 당신의 스크롤 뷰 뷰.

self.myScrollView.view.frame = self.myImageView.frame;

는 이제 스크롤 영역은 전체 이미지를 커버하기에 충분히 커야한다. 이 당신을 위해 작동하는 경우

,뿐만 아니라 매트에게 약간의 신용을주고 그의 대답은 본질적으로 같은 일을 수행하기 때문에, 그의 대답을 투표까지 별 - 기반의 코드 만 대신 nib 파일을 사용하여 모든 것을 초기화하는의, - 그리고 코드 나는 이미 그가 올린 것과 매우 흡사하다.

+0

고마워, 'myScrollView.view' ("안쪽"보기를 사용하는 것을 잊어 버렸습니다)가 작동합니다! 그리고 걱정하지 마세요. 그는 StackOverflow에서 시작합니다. 좋은 대답이기 때문에 +1을 각각의 답변에 줄 것입니다. :)! – Val

관련 문제