7

TweetbotとKickstarterforiOSは、バナー画像のあるユーザープロファイルに優れた機能を使用しています。画像をプルダウンするとtableView、画像がズームします。

私はそれを以下を使用して部分的に機能させています、それは画像の高さを変更しますが、奇妙なことに、幅ではありません:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    UIImageView *imageView = (UIImageView *)self.tableView.tableHeaderView;
    CGFloat y = -scrollView.contentOffset.y;
    imageView.frame = CGRectMake(0, scrollView.contentOffset.y, self.cachedImageViewSize.size.width+y, self.cachedImageViewSize.size.height+y);
    NSLog(@"%@", NSStringFromCGRect(imageView.frame));

}

この効果を再現する方法を知っている人はいますか?

4

6 に答える 6

35

わかりました、わかりました。これが私がしたことです:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"church-welcome.png"]];
    self.imageView.contentMode = UIViewContentModeScaleAspectFill;
    self.cachedImageViewSize = self.imageView.frame;
    [self.tableView addSubview:self.imageView];
    [self.tableView sendSubviewToBack:self.imageView];
    self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 170)];

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    CGFloat y = -scrollView.contentOffset.y;
    if (y > 0) {
        self.imageView.frame = CGRectMake(0, scrollView.contentOffset.y, self.cachedImageViewSize.size.width+y, self.cachedImageViewSize.size.height+y);
        self.imageView.center = CGPointMake(self.view.center.x, self.imageView.center.y);
    }

}
于 2013-02-20T23:39:17.827 に答える
1

上記の Swift の回答:

可変減速:

var imageView: UIImageView!
var cachedImageViewSize: CGRect!

viewDidLoad:

var imageView: UIImageView!
var cachedImageViewSize: CGRect!

override func viewDidLoad() {
    super.viewDidLoad()

    self.imageView = UIImageView(image: UIImage(named: "image-plane"))
    imageView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 170)
    self.imageView.contentMode = .ScaleAspectFill
    self.cachedImageViewSize = self.imageView.frame
    self.tableView.addSubview(self.imageView)
    self.imageView.center = CGPointMake(self.view.center.x, self.imageView.center.y)
    self.tableView.sendSubviewToBack(self.imageView)
    self.tableView.tableHeaderView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, 170))
}

scrollViewDidScroll:

override func scrollViewDidScroll(scrollView: UIScrollView) {

        let y: CGFloat = -scrollView.contentOffset.y
        if y > 0 {
            self.imageView.frame = CGRectMake(0, scrollView.contentOffset.y, self.cachedImageViewSize.size.width + y, self.cachedImageViewSize.size.height + y)
            self.imageView.center = CGPointMake(self.view.center.x, self.imageView.center.y)
        }
    }
于 2016-09-07T11:14:48.700 に答える
0

同じアスペクト比を維持しながら、画像ビューのサイズを垂直方向のスペースに合わせて変更するだけだと思います。

于 2013-02-20T22:37:09.270 に答える
0

Nic Hubbard の回答の Swift 2 バージョン:

var imageView: UIImageView!
var cachedImageViewSize: CGRect!

override func viewDidLoad(){

   super.viewDidLoad()

   self.imageView = UIImageView(image: UIImage(named: "church-welcome.png"))
   self.imageView.contentMode = .ScaleAspectFill
   self.cachedImageViewSize = self.imageView.frame
   self.tableView.addSubview(self.imageView)
   self.tableView.sendSubviewToBack(self.imageView)
   self.tableView.tableHeaderView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, 170))

}

func scrollViewDidScroll(scrollView: UIScrollView) {
var y: CGFloat = -scrollView.contentOffset.y
if y > 0 {
    self.imageView.frame = CGRectMake(0, scrollView.contentOffset.y, self.cachedImageViewSize.size.width + y, self.cachedImageViewSize.size.height + y)
    self.imageView.center = CGPointMake(self.view.center.x, self.imageView.center.y)
   }
}
于 2016-03-02T22:51:39.820 に答える