[OSX][iOS]内容フィルタ | Cocoa練習帳

[OSX][iOS]内容フィルタ

サンプルコードのFilteredViewは、IBActionのスペルが間違っている。なので、スペル間違いを我慢して、FilteredView.mのメソッド名を変更するか、FilteredView.hのIBActionを正しいスペルに変更し、MainMenu.nibのIBActionの繋がりを張り直す必要がある。ちなみに、著者は後者を選択した。




内容フィルタとは、フィルタを適用したビューの下位ビューに適用されるフィルタのことのようだ。




フィルタの定義は以下のとおり。




- (void)pointillize

  CIVector *center = [CIVector vectorWithX:NSMidX([self bounds]) 
                                         Y:NSMidY([self bounds])];
  CIFilter *pointillize = [CIFilter 
                          filterWithName:@"CIPointillize" 
                          keysAndValues:kCIInputRadiusKey, 
                          [NSNumber numberWithFloat:1.0f],
                          kCIInputCenterKey, center, nil];
  pointillize.name = @"pointillize";
  [controls setContentFilters:[NSArray arrayWithObjects:pointillize, nil]];
}



CIPointillizeフィルターは、点描スタイルでレンダリングするフィルタだ。




フィルタを実行するIBActionの記述は以下のとおり。





- (IBAction)noPointillize:(id)sender
{
  if (0 < [[controls contentFilters] count]) {
    [controls setContentFilters:nil];
  }
}
 
- (IBAction)heavyPointillize:(id)sender

  if (nil == [controls contentFilters]
    || 0 == [[controls contentFilters] count]) {
    [self pointillize];
  }
  NSString *path = [NSString stringWithFormat:
                    @"contentFilters.pointillize.%@", kCIInputRadiusKey];
  [controls setValue:[NSNumber numberWithInt:5.0f] forKeyPath:path];
}
 
- (IBAction)lightPointillize:(id)sender

  if (nil == [controls contentFilters]
    || 0 == [[controls contentFilters] count]) {
    [self pointillize];
  }
  NSString *path = [NSString stringWithFormat:
                    @"contentFilters.pointillize.%@", kCIInputRadiusKey];
  [controls setValue:[NSNumber numberWithInt:1.0f] 
          forKeyPath:path];
}



Heavy Pointalize(スペル間違い!)ボタンを押下すると、コントロール類が荒い点描に、Light Pointalize(これもスペル間違い!)ボタンを押下すると、コントロール類が細かい点描に。ポップアップするメニューでNo Pointalize(これまたスペル間違い)を選択すると、元に戻る。




関連情報
Core Animation for Max OS X and the iPhone

Core Animation for Max OS X and the iPhone

Core Image プログラミングガイド概論



【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

http://ameblo.jp/bitz/(ミラー・サイト)

Core Animation for Max OS X and the iPhone: Cre.../Pragmatic Bookshelf
¥3,480
Amazon.co.jp