twitterウィジェットを貼り付けようとしてハマった
同じ名前でツイッターもやってるのでせっかくだからサイドバーに貼ってみよう!
ということでやってみたらハマったのでメモ。
まずは貼り付けるウィジェットをTwitter公式サイトからもらいます。
https://twitter.com/about/resources/widgets
自分のツイートを出したい時はプロフィールを選びます。
色々カスタマイズして最後にコード取得ってやるとスクリプトを吐いてくれます。
で、はてなのデザイン編集画面でサイドバーのパーツのリストからブログパーツを
選んでそこにさっき取ってきたスクリプトを貼り付ければ完了!
…のはずがうまくいかない。
なんにも出てこないし編集画面でも追加された気配がない。
結論としては、吐き出してるスクリプトがイケてないせいで上手くいってないらしい。
もらってきたスクリプトがこれ。
<script src="http://widgets.twimg.com/j/2/widget.js"></script> <script> new TWTR.Widget({ version: 2, type: 'profile', rpp: 4, interval: 30000, width: 'auto', height: 300, theme: { shell: { background: '#333333', color: '#ffffff' }, tweets: { background: '#ffffff', color: '#000000', links: '#555555' } }, features: { scrollbar: true, loop: false, live: true, behavior: 'all' } }).render().setUser('azukinohiroki').start(); </script>
で、うまくいったのはこれ。
<script src="http://widgets.twimg.com/j/2/widget.js"></script> <script> new TWTR.Widget({ version: 2, type: 'profile', rpp: 4, interval: 30000, width: 'auto', height: 300, theme: { shell: { background: '#333333', color: '#ffffff' }, tweets: { background: '#ffffff', color: '#000000', links: '#555555' } }, features: { scrollbar: true, loop: false, live: true, hashtags: true, timestamp: true, avatars: false, behavior: 'all' } }).render().setUser('azukinohiroki').start(); </script>
つまり、
- hashtags:
- timestamp:
- avatars:
が無いとダメみたい。
NSObjectを継承しないと…
does not implement methodSignatureForSelectorってエラーが出ますよ!
実行時に!
いきなり落ちてしかもエラーの内容分からずでハマった。。
@interface Common {} @end
とかやりやすそうな(実際にやった)ので注意しよう…
iOS5のnextResponderの挙動
ちょっとハマったので解決してないけどとりあえずメモ。
iOS5がリリースされて、早速今のプロジェクトも5向けでリリースすることに。
スワイプの時はUIScrollViewでスクロール、タップの時は親ビューで処理したいって時に
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { if (!self.dragging) { [self.nextResponder touchesEnded:touches withEvent:event]; } }
って感じでnextResponderにイベント投げてる人は多いと思う。
いや、実際は分からないけど僕はこうやってたわけです。
それがiOSを5にしたら親ビューにtouchesEndedが来ない…
仕方がないので力技で
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { if (!self.dragging) { if (rootViewController_) [rootViewController_ touchesEnded:touches withEvent:event]; else [self.nextResponder touchesEnded:touches withEvent:event]; } }
こんな実装にしてしまった…
自分が憎い。。
解決策をご存知の方がいたらぜひ教えて頂きたいです。
ってか公式ドキュメント読めって話ですかね…頑張ろう。
…スクロールビュー周りではいつもハマる。
nextResponder使わない方法ですが、スクロールビューの挙動を
理解するのにこの記事にはお世話になりました。
Quartzで影生成
メモ。
CGContextDrawShadingを使うらしい。
後でちゃんと調べる。
起動時にデバイスの向きを取得する
画面の向きによって挙動を変える時、willRotateToInterfaceOrientationを実装してやることで画面の向きの変更に対応する事ができます。
ただ、このメソッドは画面の向きが変わった時にだけ呼ばれるのでホームボタンが下の状態で起動すると呼ばれません。
そこで起動時に画面の方向を取ろうと
UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
を呼んでみると、UIDeviceOrientationUnknownが返ってきてしまいました。
縦でも横でもUIDeviceOrientationUnknown。
困ったのでぐーぐる先生に聞いてみたところ、
http://stackoverflow.com/questions/1941482/uideviceorientationunknown-in-landscape-mode
こんなの出てきました。
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
これを使えば良かったんですね。
無事に画面の向きを取れました。
stackoverflowは便利ですね。
iOS3.2でのDisplayLinkの取り方
初めて書きますよ。
はてな記法とかまだよく分かってないです。
これから勉強するので許して下さい。
iPhoneでアニメーションループを使いたい時、iOS4.0以降のサンプルだと
CADisplayLink *aDisplayLink = [[UIScreen mainScreen] displayLinkWithTarget:self selector:@selector(drawFrame)];
ってなってますが、このメソッドはiOS4.0でしか動かないので古いiOSを使ってる端末だと落ちます。
憎い。。
CADisplayLink *aDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawFrame)];
こうすればiOS3.1以上の端末でもディスプレイリンクがとれます。
めでたしめでたし。