2012-11-13 3 views
0

저는 ScrollView가있는 iPad보기가 있으며 그 아래에 페이지 컨트롤 개체를 사용하여 페이지가 어떤 페이지에 있는지 보여줍니다. 화면의 다른 곳에서 나는 12:00 AM과 5:00 AM 사이의 타임 라인을 가지고 있습니다. 시간이 진행됨에 따라 시간을 표시하기 위해 타임 라인 상단에 UIImage가 더 넓어졌습니다. UIImage는 매분마다 시작되는 NSTimer의 사용을 통해 하루가 진행됨에 따라 더 넓어집니다.UIPageControl 재설정 원래 상태로보기

또한 Scrollview 내부에 새로운 이미지 세트가있는 Scrollview를 새로 고치는 3 개의 버튼이 페이지에 있습니다. 이미지 수는 3에서 7 사이에서 변경할 수 있습니다. 따라서 버튼을 누르면 스크롤 뷰를 업데이트하고 페이지 컨트롤 객체를 업데이트하여 "numberOfPages"속성을 적절한 숫자로 설정합니다.

OK, 버튼을 클릭하고 pageControl numberOfPages가 변경 될 때마다 UIImage는 인터페이스 작성기 (스토리 보드)에서 원래 디자인했을 때의 크기로 되돌아갑니다.

#import <UIKit/UIKit.h> 
@interface ViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UIButton *btnTest; 
@property (weak, nonatomic) IBOutlet UIImageView *imgTest; 
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl; 
- (IBAction)buttonPress:(id)sender; 
@end 

ViewController.m : # import를 "ViewController.h"

나는 희망 동작을 재현하기에 충분있는 간단한 예제 프로젝트 ...

ViewController.h을 생성

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize imgTest,btnTest,pageControl; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    // Set up an observer to handle updating the timeline 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(UpdateWidth:) 
               name:@"UpdateWidth" object:nil]; 
} 

-(void)viewDidAppear:(BOOL)animated { 
    // Send an updateTimeIndicator notification when screen loads. 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"UpdateWidth" object:@"sent"]; 
} 


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)buttonPress:(id)sender { 
    pageControl.numberOfPages = 7; 
    pageControl.currentPage = 0; 

} 

-(void)UpdateWidth:(NSNotification *)notification{ 
    [imgTest setFrame:CGRectMake([imgTest frame].origin.x, [imgTest frame].origin.y, 
              450, [imgTest bounds].size.height)]; 

    imgTest.contentMode = UIViewContentModeScaleAspectFit; // This determines position of image 
    imgTest.clipsToBounds = YES; 
    [imgTest setNeedsDisplay]; 

    NSLog(@"Width Updated"); 
} 
@end 

그래서이 예제에서는 PageControl, Button 및 배경이 파란색으로 설정된 UIImage라는 3 개의 개체가 Window에 있습니다. UIImage의 크기를 조정할 때 알림 센터를 사용하여 메시지를 보내고 있습니다 (이 경우 한 번만,보기가 나타날 때). updateWidth 루틴은 UIImage의 너비를 450 픽셀로 지정하고보기가 올바르게 표시됩니다.

그러나 단추를 누르면 numberOfPages 값이 변경되고 UIImageView는 Interface Builder에서 원래 레이아웃되었을 때의 크기로 다시 설정됩니다.

누구나보고 싶으면 압축 된 프로젝트 파일이 있습니다. 또한 알림 센터를 사용하지 않고이 작업을 시도했지만 그 결과는 동일했습니다 (원래 알림 센터를 사용하지 않고 다른 결과를 줄 수 있다고 생각했습니다).

아마도 PageControl 개체를 사용하지 않아도 얻을 수 있지만 지금은 왜 그런지 궁금합니다. 감사!

+0

나는 zip 프로젝트를 [email protected]에 보내겠습니까? –

+0

이메일을 보냈습니다 - 감사합니다! 실제로 이것을 보지 않고 설명하기는 다소 어려움이 있습니다. StackOverflow 내에서 여기에 프로젝트 파일을 첨부 할 수 있습니다. – user1720817

답변

0

ScrollView 및 PageControl 개체를 모두 자신의 (새로운) UIView에 배치하여 문제를 해결 한 것 같습니다. 이렇게하기 위해 인터페이스 빌더에 스토리 보드를 열고 툴바의 View 객체를 인터페이스 창에 마약으로 연 다음 기존의 ScrollView 및 PageControl 객체를 새 UIView에 배치했습니다. 그런 다음 PageControl의 numberOfPages 속성을 변경해도이 윈도우의 다른 항목에는 영향을주지 않습니다.

나는 아직도이 행동에 관해서 혼란 스럽다. 일단 페이지 컨트롤이 새로운 뷰에 배치되고 문제가 중지되면 PageControl이 numberOfPages 속성이 변경된 전체 뷰를 업데이트하려고하기 때문에 나는 추측합니다.