我有一个 iPad 视图,它有一个 ScrollView,在它下面我使用一个页面控制对象来显示它所在的页面。在屏幕的其他地方,我在上午 12:00 和上午 5:00 之间有一个时间线 - 随着时间的推移,时间轴顶部有一个 UIImage 变宽以指示一天中的时间。UIImage 会随着时间的推移通过使用每分钟左右启动的 NSTimer 变得更宽。
此外,我在页面上有 3 个按钮,它们将使用其中的一组新图像刷新 Scrollview。图像的数量可以在 3 到 7 之间变化。因此,当按下按钮时,我会更新滚动视图,并更新 Page Control 对象以将“numberOfPages”属性设置为适当的数字。
好的,所以问题似乎是,每当我单击一个按钮并且 pageControl numberOfPages 发生更改时,UIImage 就会恢复到我最初在 Interface Builder(故事板)中设计它时的任何大小。
我创建了一个简化的示例项目,希望有足够的能力重新创建行为......
视图控制器.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 对象也能过得去,但我现在很好奇为什么会这样。谢谢!