Cocoaセミナー中です。

となりに monospace の中の人がいます。
なぜか二人とも演習をすべて PyObjC でやっています。

セミナー無事終了

セミナーで出てきたものを取り合えず PyObjC にしてみます:^)
興味ある人はお試しくださいませ。

Cocoa セミナー グラフィックス編
http://developer.apple.com/jp/documentation/Cocoa/Seminar/CocoaGraphics/CocoaGraphics.zip

ライセンス周りがよくわからないですが、ソースコードPyObjC に移植しただけだから問題ない ... と思う。
つっこまれたら公開やめます。

一応すべてのサンプルを PyObjC にする予定です。

開発環境は IPython と VIM がメインです。 XCode はデバッガとして使っております。
デバッガがなかなか優秀です:-) ブレイクポイントとか。

動作確認済み

# vim: sts=4 sw=4

from objc import YES, NO, IBAction, IBOutlet
from Foundation import *
from AppKit import *

class BrowerView(NSView):
    def initWithFrame_(self, frame):
        self = super(BrowerView, self).initWithFrame_(frame)
        if self:
            """
            earthImage = [[NSImage alloc] initWithContentsOfFile:
                    @"/Library/Desktop Pictures/Nature/Earth.jpg"];
            """
            ns_image = NSImage.alloc()
            self.earth_image = ns_image.initWithContentsOfFile_('/Library/Desktop Pictures/Nature/Earth.jpg')

        return self

    def drawRect_(self, rect):
        """
        NSRect srcRect;
        srcRect.origin.x = 0;
        srcRect.origin.y = 0;
        srcRect.size = [earthImage size];
        [earthImage drawInRect:rect fromRect:srcRect
                operation:NSCompositeCopy fraction:1.0f];
        """

        src_rect = NSRect()
        src_rect.origin.x = 0
        src_rect.origin.y = 0
        src_rect.size = self.earth_image.size():
        self.earth_image.drawInRect_fromRect_operation_fraction_(
            rect, src_rect, NSCompositeCopy, 1.0)
        )

動作未確認

# vim: sts=4 sw=4

from objc import YES, NO, IBAction, IBOutlet
from Foundation import *
from AppKit import *
from Quartz import *

class Controller(NSObject):
    #image_view = = IBOutlet()
    image_view = IKImageView.alloc()

    def awakeFromNib(self):
        url = '/Library/Desktop Pictures/Nature/Aurora.jpg'
        image_view.setImageWithURL_(url)
        image_view.setAutoresizes_(YES)

動作確認済み

# vim: sts=4 sw=4

import os

from objc import YES, NO, IBAction, IBOutlet
from Foundation import *
from AppKit import *

class BrowserView(NSView):
    def initWithFrame_(self, frame):
        self = super(BrowserView, self).initWithFrame_(frame)
        if self:
            # initialization code here
            self.images = []

            dir_path = '/Library/Desktop Pictures'
            for root, dirs, files in os.walk(dir_path):
                for f in files:
                    subpath, ext = os.path.splitext(f)
                    if ext == '.jpg':
                        path = os.path.join(root, f)
                        ns_image = NSImage.alloc()
                        image = ns_image.initWithContentsOfFile_(path)
                        self.images.append(image)
        return self

    def drawRect_(self, rect):
        # drawing code here
        width = 200
        height = 200
        margin = 20

        src_rect = NSRect()
        dst_rect = NSRect()

        dst_rect.origin.x = margin
        dst_rect.origin.y = margin
        dst_rect.size.width = width
        dst_rect.size.height = height

        for image in self.images:
            src_rect.origin = NSZeroPoint
            src_rect.size = image.size()
            image.drawInRect_fromRect_operation_fraction_(
                dst_rect,
                src_rect,
                NSCompositeCopy,
                1.0
            )

            dst_rect.origin.x += width + margin
            if NSMaxX(dst_rect) > rect.size.width:
                dst_rect.origin.x = margin
                dst_rect.origin.y += height + margin

追記

pateo さんがすさまじく素敵な「無駄」(ほめ言葉)をやってくれています。

monospace blog » Cocoaセミナーグラフィックス編@Apple Inc
http://blog.monospace.jp/2007/12/20/cocoa-seminar-graphics/