プライベートメソッドなのに

objective-cはインターフェースに書かれていないプライベートメソッドもオーバーライドできちゃうYO!
自由度が高いっちゃー高いんでしょうけど、これはバグの温床っぽいなぁ。

だからメソッドの頭にプリフィックスを書く事が一部で流行ってるのか・・
嫌だな・・

ゴールドラッシュキャンペーン

canonのキャッシュバックキャンペーンが5月6日まで行われてます!
先日の「EF100mm F2.8L マクロ IS USM」も対象になってます!!

5/6までに節約してお金貯めよう!!!

(追記)キャッシュバックキャンペーンが始まったら何故か5000円ほどamazonでの価格が高くなった気がする。。。

あーマクロレンズほっしいなー

どっかに8万円ほど落ちてないかなー
そしたら 「EF100mm F2.8L マクロ IS USM」 買えるのになー

マクロレンズは各社色々出てますが、あれこれ調べてたら結局これになるんです。
散歩がてらのマクロ撮影ではやっぱり手持ち、そしたらハイブリッドIS付きのこいつに行き着く。
でもなー値段がなー

最近勢いのあるシグマあたりがハイブリッドOS付きでお安く出してくれんですかね?

UIScrollViewの慣性スクロールをピタッと止める

幾つか方法があるようなんですけど、UIScrollViewDelegateのscrollViewWillEndDraggingかscrollViewWillBeginDeceleratingでcontentOffsetに現在の値を設定すれば止まってくれました。

//scrollViewWillBeginDecelerating


-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
   //↓これで止まる	
   [scrollView setContentOffset:scrollView.contentOffset animated:NO];

}

//scrollViewWillEndDragging


- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
   //↓これで止まる	
   *targetContentOffset = scrollView.contentOffset;

}

ちょっと不思議なのは上記のようにscrollView.contentOffsetであれば止まってくれるのですが、
CGPointMake(scrollView.contentOffset.x, 0)
のように新たに生成したCGPointでは止まってくれないのです。
(最終的には指定した位置で止まるのですが、ピタッととまらない)

UIViewをUIPopoverControllerで表示する

UIPopoverControllerでなにかしらポップアップさせる時、一々UIViewControllerを新規クラスで作成するのが面倒な時ありますよね。
UIViewでの実装がすでにあるものをポップアップさせたい時とか。

こんな時はUIViewControllerを直接インスタンス化してそのviewにUIViewを割り当てればOKっぽいです。
(この辺がobjective-cらしいなーと思う所です)


UIViewController* popupContents 
  = [[[UIViewController alloc]init]autorelease];
popupContents.view 
  = [[XXXXView alloc]initWithFrame:CGRectMake(0, 0, 400, 400)]autorelease];
popupContents.contentSizeForViewInPopover = CGSizeMake(400, 400); //※1

UIPopoverController* popup 
  = [[[UIPopoverController alloc]initWithContentViewController:popupContents]autorelease];

//アニメーション付きで表示する(ここは適当)  
[popup presentPopoverFromRect:CGRectMake(0, 0, 10, 10) 
       inView:self permittedArrowDirections:UIPopoverArrowDirectionAny 
       animated:YES];

※1でcontentSizeForViewInPopoverを指定していますが、これが表示されるポップアップのサイズになります。

UIColorの混合

cocoaの場合、描画関係のAPIが充実しているので自分でグラデーションを描画する事は少ないと思われます。
が、まれーにグラデーションの中間色、色と色とを特定の割合で混合した色を求めたい状況があるわけです。

そんな時はこれ
weightが0の時はcolorFrom、100の時はcolorToの色となるように色成分を混合して
返してくれます。


// weight: 0~100
-(UIColor*)makeBlendColorFrom:(UIColor*)colorFrom colorTo:(UIColor*)colorTo weight:(float)weight
{
    float r1,g1,b1,r2,g2,b2,alpha;

    //RGB値を求める
    [colorFrom getRed:&r1 green:&g1 blue:&b1 alpha:&alpha];
    [colorTo getRed:&r2 green:&g2 blue:&b2 alpha:&alpha];

    //色成分を混合
    float red = (r2*weight + r1*(100.0 - weight))/100.0;
    float green = (g2*weight + g1*(100.0 - weight))/100.0;
    float blue = (b2*weight + b1*(100.0 - weight))/100.0;

    return [UIColor colorWithRed:red green:green blue:blue alpha:1];
}