2012-01-11 36 views
0

我有一个UIScrollView,其中包含一个子UIView,insetView,它用于显示其他UIViews,在运行时交换进出。这些子视图不仅是图像或单视图对象。他们是包含按钮,标签,图像等功能齐全的视图。当我放大和缩小UIButton时,会出现“边缘闪烁”。这是一个UI错误,是否有修复?

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

我可以持续,缓慢地放大和缩小以及当线路之一出现,我可以稍微捏和扩大我的手指,我会看到同样符合还算公道一致性消失,再次出现,并再次。

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

这是那些不影响应用程序功能的小细节之一,但它大大影响了波兰语的水平。在具有足够按钮的屏幕上,这实际上是相当烦人的。

请看下面的两张图片作为例子。这些都是从iPad上的屏幕截图中截取的,我将它们放大了一点,以便您可以看到亮点。像素化来自我的照片编辑器中的反锯齿,而不是iPad。

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

良好形象

enter image description here

坏形象

enter image description here

+0

你可以显示UIButton实例和图像文件(后链接)?我无法让我的按钮发生这种情况。 – bentford 2012-01-11 20:11:28

+0

该按钮在IB中创建。目前,我只是在设计我的界面。按钮的图像是矩形,即按钮的确切大小。他们是PNG,他们不使用alpha通道。这有帮助吗? – RLH 2012-01-11 20:17:00

回答

0

我找到了答案。按钮默认为圆角矩形。这意味着它在按钮的背景中绘制一个矩形。我不知道UIButton类仍然会绘制矩形,即使它是被过度绘制的,但是我不知道UIButton类是否会绘制矩形,我的形象。显然,在特定的缩放间隔下,矩形的边缘可以显示在按钮上。我不认为这会发生,是的,是一个错误。但是,解决方案是将IB中的按钮类型从Rounded Rect更改为Custom

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

+0

感谢您的帮助。我发现问题并决定发布答案。这是一个新手问题。我不知道IB的按钮Type属性,所以这让我很悲伤。 – RLH 2012-01-11 21:16:23

+0

没问题。 :) ... – bentford 2012-01-11 23:16:05

相关问题