2016-05-01 3 views
0

autoLayoutサイズクラスモードでiOS 8 xcode 7.3のイメージ(テーブルビューのセルにある)をマスクしようとしています。autoLayoutとsizeclassでイメージをマスクする

私は、このリンクを見て:最初の答えは私のために動作しませんでしたHow to Mask an UIImageView

を。セカンドアンサーは機能しますが、マスクされたイメージのサイズは正しくありません。

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
UIImage *imgStory = [UIImage imageNamed:@"story1"]; 
UIImage *imgMask = [UIImage imageNamed:@"storyFrameMask"]; 

UIImageView *imgViewStory = (UIImageView *)[cell viewWithTag:100]; 
UIImageView *imgViewBorder = (UIImageView *)[cell viewWithTag:101]; 

imgViewStory.image = imgStory; 
CALayer *mask = [CALayer layer]; 
mask.contents = (id)[[UIImage imageNamed:@"storyFrameMask"] CGImage]; 
// mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, 178.0, 235.0); 
mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, imgViewBorder.frame.size.width, imgViewBorder.frame.size.height); 
imgViewStory.layer.mask = mask; 
imgViewStory.layer.masksToBounds = YES; 
} 

と私の出力のスクリーンショットは、次のとおりです:私のコードは[![ここに画像の説明を入力] [1]] [1]

を私は幅に対するカスタム値を与えることによって、問題を修正することができますし、マスクフレームの高さ(私はコード内で固定幅と高さをコメントしました。あなたはそれを見ることができます)、これは正しい方法ではないことが分かります。私は自動レイアウトとサイズクラスを使用しているからです。

固定幅と高さは、単一のサイズクラスに対してのみ機能します。

これは私が一定の幅と高さを設定するときscrenが撮影している: を私はすべてのウェブサイトを検索なかったが、それらの何が自動ためのものである[2]

[2] [[ここに画像の説明を入力]!]レイアウト。 私はあらゆるサイズのクラスやデバイスに優れたマスクを手に入れることができます。

編集:マスクされたイメージビューの制約は、イメージビューの境界と同じです。それらのフレームは互いに等しい。問題は私のレイアウトからではありません。問題は、マスクされたイメージビューで溺れるマスクされたイメージです。私はマスクフレームの幅と高さにカスタム値を与えることで問題を解決できますが、これは自動レイアウトで正しい方法ではありません。

答えて

0

編集済み:古い回答が正しくありません。

問題は-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPathにあり、画像ビューのフレームは最終フレームではありません。その瞬間のフレームは、ストーリーボードのサイズを設計するのと同じです。この問題を解決するために 、私はあなたがあなたのカスタムセルで- (void)layoutSubviewsをオーバーライドして、このようなマスクの正しいフレームを設定すべきだと思う:それは違いない

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    CALayer *mask = [CALayer layer]; 
    mask.contents = (id)[[UIImage imageNamed:@"storyFrameMask"] CGImage]; 
    // mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, 178.0, 235.0); 
    mask.frame = CGRectMake(imgViewBorder.frame.origin.x, imgViewBorder.frame.origin.y, imgViewBorder.frame.size.width, imgViewBorder.frame.size.height); 
    imgViewStory.layer.mask = mask; 
    imgViewStory.layer.masksToBounds = YES; 
} 
+0

番号を。 imgViewBorderの起点はimgViewStoryの起点と同じです。さらに、私のスクリーンショットを見ると、起源が問題ではないことがわかります。マスクされた画像の幅と高さが問題になります。あなたが私の質問の答えではなく、あなたのコメントの方が良かったです。 –

+0

誰も私を助けることができない!!!! : –

+0

私の答えを更新しました。確認してください。 – Tien

関連する問題