OK、それで最終的に私はIsmaelが幅を調整しなければならないと提案したので答えを見つけました、問題は方程式を見つけることでした。
スケーリングの仕組みとスクロールビューのサブビューの幅は、最初は明らかではありません。
スクロールビューで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幅を1回使用し始めたため重要です。
スクロールビューのサブビューの幅を600に再調整するには、初期幅をズームスケールで除算し、ラベルを再調整するだけです。
[messageLabel setFrame:CGRectMake(0,0,(initialWidth/scale), messageLabel.frame.size.height)];
[messageLabel sizeToFit];
この時点で、ズーム可能なスクロールビューがあり、テキストをスクロールビューの初期幅に再調整するラベルがあり、水平スクロールバーはありませんが、問題があります。垂直スクロールバーの高さが間違っています。テキストの一部しかスクロールできません。
これは解決するのが難しい2番目の問題でした。messageLabelの高さをcontentsizeに渡すと、不思議なことに機能していないように見えます。NSLogで高さにスケールを掛けても、内部で分割されているかのように、スクロールの高さは変更されません。また。たとえば、初期の高さが500の場合、2でスケーリングした後、1000の高さが得られます。この値をContentSizeに渡すと、2で割った場合と同じままになります。
したがって、解決策は今回はスケールを掛けることでした。
次の行を追加するだけです。
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, (messageLabel.frame.origin.y+messageLabel.frame.size.height)*scale)];
ご覧のように、難しい部分は、スケールで除算または乗算することでこの混乱を理解することでした。