当我放大和缩小时,UIButtons具有“边缘闪烁”。这是一个UI错误,是否有修复?

时间:2012-01-11 19:48:11

标签: ios xcode uiscrollview

我有一个UIScrollView,它包含一个子UIView,insetView,用于显示在运行时交换进出的其他UIView。这些子视图不仅是图像,还是单视图对象。它们是包含按钮,标签,图像等的全功能视图。

我看到的问题是,当我放大和缩小时,我注意到我的按钮边缘,这些闪烁的线条不断出现。关于这些线条的奇怪之处在于它们可以出现在我的按钮的任何一侧,但它们从不会一直延伸到按钮的角落。

我可以持续地,慢慢地放大和缩小,当其中一条线出现时,我可以轻轻地捏住并伸展我的手指,我会看到同一条线消失并再次出现,并再次以非常公平的一致性。 / p>

这是缩放算法的错误吗?有什么方法可以阻止这个吗?

这是一个不影响应用程序功能的小细节,但它会大大影响抛光程度。在有足够按钮的屏幕上,这实际上非常烦人。

请参阅下面的两张图片作为示例。这些是从我的iPad上的屏幕截图中获取的,然后我将它们缩小了一些,以便您可以看到突出显示。像素化来自于切断照片编辑器中的消除锯齿,而不是来自iPad。

这是一个带有两个按钮的示例,彼此相邻。第一张图片看起来是正确的,第二张是错误的。

良好形象

enter image description here

错误图片

enter image description here

2 个答案:

答案 0 :(得分:1)

也许缩放设置不正确,尤其是如果您只使用IB。请参阅示例代码。添加到“zoomingContainer”的任何内容都将被正确缩放。

@interface ViewController : UIViewController <UIScrollViewDelegate> {
    UIView *zoomingContainer;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height);
    scrollView.delegate = self;
    scrollView.maximumZoomScale = 4.0;
    [self.view addSubview:scrollView];

    zoomingContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
    [scrollView addSubview:zoomingContainer];

    UIButton *saveButton = [UIButton buttonWithType:UIButtonTypeCustom];
    saveButton.frame = CGRectMake(50,100, 100,40);
    [saveButton setBackgroundImage:[UIImage imageNamed:@"RedButton.png"] forState:UIControlStateNormal];
    [saveButton setTitle:@"Save" forState:UIControlStateNormal];
    saveButton.titleLabel.font = [UIFont boldSystemFontOfSize:20];

    [zoomingContainer addSubview:saveButton];
}

#pragma mark UIScrollViewDelegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return zoomingContainer;
}
#pragma mark -

@end

RedButton file is here

的链接

答案 1 :(得分:0)

我找到了答案。按钮默认为圆角矩形。这意味着它在按钮的背景中绘制一个矩形。

我是iOS开发的新手,所以当我在IB中为每个按钮设置Image时,我没有意识到UIButton类仍会绘制矩形,即使它被我的过度绘制图片。显然,在某些缩放间隔,矩形的边缘可以显示在按钮上。我不认为这应该发生,是的,是一个错误。但是,解决方案是将IB中的按钮类型从Rounded Rect更改为Custom