1

ヘッダー ファイル内:

@property (strong,nonatomic) IBOutlet UIView *zoomView;

m ファイルでは、zoomView をいくつかのサイズ、色、境界線の幅で初期化します。

- (void)viewDidLoad
{
    [super viewDidLoad];

    //initialize the zoom rectangle
    [zoomView.layer setBorderColor: [[UIColor orangeColor] CGColor]];
    [zoomView.layer setBorderWidth: 4.0];
    [zoomView.layer setFrame: CGRectMake(zoomView.layer.frame.origin.x, zoomView.layer.frame.origin.y, 100, 200)];
}

次に、いくつかのユーザー アクション、特にピンチで、次のコードを呼び出します。

-(void)redrawBox {
    [zoomView.layer setBorderWidth: 4.0];
    [zoomView.layer setNeedsLayout];
}

残念ながら、境界線の幅は大きく異なります。ボックスを縮小すると、枠線の幅が比例して大きくなり、見栄えが悪くなります。このコードが呼び出され、境界線の幅が適切に設定されていることを再確認しました (幅を 0 に設定すると問題なく動作し、ボックスが消えます)。ズーム レベル。

長方形のズーム方法に関係なく、境界線の幅を一定に設定するにはどうすればよいですか? ありがとう!

4

3 に答える 3

0

問題は、transformまだボックスに設定されているため、境界線がズームされることに気付きました。私が思いついた解決策は次のとおりです。

-(void)redrawBox {
    //set the border width again so that the width doesn't change with zooming
   CGRect currentFrame = zoomView.layer.frame;
    zoomView.transform = CGAffineTransformIdentity;
    [zoomView.layer setBorderWidth: 4.0];
    [zoomView.layer setFrame: CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
}

これにより、ボックスが正しいサイズで最初から再描画されますが、変換セットがないため、境界線は実際には 4 ポイントになります。

于 2013-06-18T14:05:21.517 に答える
0

このコードは、UIScrollView をズームしている間、CALayer の境界線を固定幅に保ちます。

- (void) scrollViewDidZoom:(UIScrollView *)scrollView
{
    CGFloat newBorderWidth = UIScreen.mainScreen.scale / scrollView.zoomScale;
    zoomView.layer.borderWidth = newBorderWidth;
}
于 2016-10-28T13:35:45.367 に答える