2012-11-23 24 views
1

我有一个可缩放的UIScrollview,子视图是一个包含UILabel(messageLabel)的UIView(viewTexto)。如何在缩放后调整UILabel文字UIScrollview zoomable

这是代码

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollViewtmp{ 

    return viewTexto; 
} 
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollViewtmp withView:(UIView *)view atScale:(float)scale{ 

     messageLabel.contentScaleFactor=scale; 

    [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, messageLabel.frame.origin.y + messageLabel.frame.size.heightt)]; 

    } 

有了这个代码,我可以放大,而文字是不模糊,没有横向滚动,但的UILabel规模的不断过大,所以它被切断。我需要UILabel的宽度再次采用scrollView宽度作为开始。

我已经阅读了任何有关UIScrollViews在SO中的问题,并找到了我所需要的。

回答

1

好的,所以最后我找到了答案,因为伊斯梅尔建议我不得不调整宽度,问题是找到方程。

缩放工作的方式和scrollview子视图的宽度在开始处并不明显。

一旦你在一个滚动视图中缩放一个UIView,并且你希望它具有相同的宽度,你必须将该元素的宽度除以该尺度。

也就是说,如果你的初始宽度是600,那么一旦你缩放,你可以认为宽度已经改变了,你只需要将它重新调整到600,但这不是事实。 600将自动乘以比例。所以正确的答案是将其调整到600 /比例。 这里我们分开。

现在代码:

一切都发生在方法:

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollViewtmp withView:(UIView *)view atScale:(float)scale{} 

的第一件事就是摆脱模糊的字体:

messageLabel.contentScaleFactor=scale; 

在另一种方法我救了UILabel messageLabel(scrollview内部)的初始宽度,我称之为变量“initialWidth”,即600。这很重要,因为我开始在scrollViewDidEndZooming方法中使用当前的messageLabel宽度。

若要重新调节滚动视图到600的子视图的宽度,我们只有由zoomscale划分初始宽度,并重新调整标签:

[messageLabel setFrame:CGRectMake(0,0,(initialWidth/scale), messageLabel.frame.size.height)]; 
[messageLabel sizeToFit]; 

此时,我们有一个滚动视图那可以缩放,与调整文本滚动视图的初始宽度的标签,我们没有水平滚动条,但是我们有一个问题,垂直滚动条有一个错误的高度:我们只能滚动文本的一部分。

这是解决一个困难的第二个问题。 如果你通过了messageLabel高度与contentsize,奇怪的是它似乎doesn'work,即使我得到一个高度乘以在我NSLogs规模,它不会改变滚动的高度,如果内部是再次划分。例如,如果初始高度为500,由2缩放之后,我得到1000的高度,如果我这个值传递给它ContentSize保持相同,就好像它是由2

所以溶液再划分这一次乘以比例。

我们只需要加入这行:

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, (messageLabel.frame.origin.y+messageLabel.frame.size.height)*scale)]; 

正如看见,困难的部分是了解这个烂摊子与分割或由规模倍增。

+0

@netadictors我认为你的建议将帮助我解决我的问题http://stackoverflow.com/questions/19728213/uilable-numberoflines-and-font-size-automatically-set-during-zoom-in-out -时间 。我怎样才能在规模时间设置UILable的高度? – Hitarth

0

后放大,一个UIScrollView按比例增加(originalContentSize * zoomScale)的contentSize,所以当你再次调整它,它会变得越来越小

例: 你scrollView.frame是(0,0,100,100 ),你的contentSize是(100,100)。 放大到2.0后,您的contentSize将会是(200,200)。 然后手动将它放在(100,100)处,这等于(50,50)的contentSize而不放大。

由于(contentSize.width <= scrollView.frame.size.width),将不会有水平滚动,并且标签的最右侧部分不可见。

尽量不要调整contentSize。然后可以滚动,用户可以到达整个标签

编辑:重新阅读您的问题,如果您希望标签在缩放后完全可见并变得可见,您必须在除了调整contentSize,正在调整messageLabel's的框架。标签应该自行包装