私の問題に関連するいくつかの投稿があるようですが、どれも役に立たないようです。自動レイアウトが使用されている場合、CALayer のアンカー ポイントを調整するにはどうすればよいですか?
標準ビュー (およびビューコントローラー) が縮小され、別のビューに表示される、(チュートリアルとして) アプリの縮小プレビューがあります。
=============
= =
= --------- =
= - - =
= -Preview- =
= - - =
= --------- =
= View =
=============
これには、次のコードを使用します。
previewViewController.view.transform = CGAffineTransformMakeScale(scale*2, scale*2);
チュートリアルのビュー コントローラーに合わせて、このスケーリングされたビューも必要です。このために、スケーリングされたビューのサイズを一致させる「プレースホルダー ビュー」を作成しました。
このために私は使用します:
-(void)setConstraintsForPreviewViewController
{
NSArray *attributes = @[@(NSLayoutAttributeLeftMargin), @(NSLayoutAttributeRightMargin), @(NSLayoutAttributeTopMargin), @(NSLayoutAttributeBottomMargin)];
[attributes enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL *stop) {
NSLayoutAttribute attribute = [obj integerValue];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.viewControllerPlaceholderView
attribute:attribute
relatedBy:NSLayoutRelationEqual
toItem:previewViewController.view
attribute:attribute
multiplier:1
constant:0]];
}];
}
これは iOS 7 ではうまくいきましたが、XCode 6 と iOS 8 でビルドするとうまくいかないようです。最初に制約を設定し(プレースホルダーに調整)、次に縮小します(結果としてプレビューが小さすぎます)。
コード:
-(void)setupPreviewViewController
{
float scale = [self scale];
previewViewController = [self.storyboard instantiateViewControllerWithIdentifier:[PLACEHOLDER_VIEWCONTROLLER_NAMES objectAtIndex:self.identifier]];
previewViewController.view.transform = CGAffineTransformMakeScale(scale*2, scale*2);
[self.view addSubview:previewViewController.view];
previewViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[self addChildViewController:previewViewController];
[self setConstraintsForPreviewViewController];
self.viewControllerPlaceholderToImageViewSpaceConstraint.constant = ([self hasNavigationBar] ? (44 * scale * 2) : -22 * scale * 2);
self.viewControllerPlaceholderToBottomSpaceConstraint.constant = IS_WIDESCREEN ? 160 : 131;
previewViewController.view.userInteractionEnabled = NO;
[self.view setNeedsLayout];
}