我有一个带有ScrollView的iPad视图,下面我正在使用页面控制对象来显示它所在的页面。在屏幕上的其他地方,我有一个时间轴介于凌晨12点到凌晨5点之间 - 随着时间的推移,有一个UIImage在时间线的顶部变得更宽,以指示一天中的时间。随着时间的推移,UIImage变得越来越广泛,因为每分钟都会开始使用NSTimer。
此外,我在页面上有3个按钮,用于刷新Scrollview,其中包含一组新图像。图像的数量可以在3到7之间变化。因此,当按下按钮时,我更新滚动视图,并更新页面控制对象以将“numberOfPages”属性设置为适当的数字。
好的,所以问题似乎是每当我点击一个按钮并更改pageControl numberOfPages时,UIImage会恢复到我最初在Interface Builder(故事板)中设计它时的大小。
我创建了一个简化的示例项目,希望能够重新创建行为......
ViewController.h:
#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”
@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
所以,在这个例子中,我在Window中只有3个对象 - PageControl,一个Button和一个背景设置为蓝色的UIImage。我正在使用通知中心发送关于何时调整UIImage大小的消息(在这种情况下,我只会在视图出现时执行一次)。 updateWidth例程将UIImage的大小设置为450像素宽,并且视图显示为应该。
但是,点击该按钮将更改numberOfPages值,这样,将UIImageView设置回原来在Interface Builder中布局时的大小。
如果有人想看到它,我确实有一个压缩的项目文件。此外,我没有使用通知中心尝试这个,结果是相同的(我原来没有使用通知中心,只是认为它可能会给出不同的结果)。
我可以在不使用PageControl对象的情况下完成,但我现在对于为什么会发生这种情况非常好奇。谢谢!
答案 0 :(得分:0)
我似乎已经通过将ScrollView和PageControl对象放入他们自己的(新)UIView来解决了这个问题。为此,我在界面构建器中打开了故事板,将一个View对象从工具箱中输出到界面窗口,然后将现有的ScrollView和PageControl对象放入新的UIView中。之后,更改PageControl的numberOfPages属性不会影响窗口上的任何其他内容。
我仍然对这种行为感到困惑。我猜是因为一旦页面控件被放置在一个新视图中并且问题停止了,那么当更改numberOfPages属性时,PageControl想要更新它所在的整个视图。