【问题标题】:Moving UIImageView Moves Entire View移动 UIImageView 移动整个视图
【发布时间】:2014-10-16 23:35:28
【问题描述】:

所以我试图让一些块(称为障碍物)从屏幕顶部掉下来。这可行,但我的代码也将整个视图向下移动...

ViewController.h:

@interface ViewController : UIViewController{
IBOutlet UIImageView * obstacle;
IBOutlet UIImageView * block;
NSTimer * obstacleTimer;
NSTimer * obMoveTimer;
}
-(void)obTimer;
-(void)moveOb;

ViewController.m:

- (void)obTimer{
UIImageView *cloneImageView = [[UIImageView alloc] initWithImage:obstacle.image];
cloneImageView.frame = CGRectMake(0, -20, obstacle.frame.size.width,     obstacle.frame.size.height);
cloneImageView.alpha = obstacle.alpha;
cloneImageView.layer.opacity = obstacle.layer.opacity;
cloneImageView.clipsToBounds = obstacle.clipsToBounds;
cloneImageView.backgroundColor = obstacle.backgroundColor;
cloneImageView.tintColor = obstacle.tintColor;
cloneImageView.contentMode = obstacle.contentMode;
cloneImageView.highlighted = obstacle.highlighted;
cloneImageView.opaque = obstacle.opaque;
cloneImageView.userInteractionEnabled = obstacle.userInteractionEnabled;
cloneImageView.multipleTouchEnabled = obstacle.multipleTouchEnabled;
cloneImageView.autoresizesSubviews = obstacle.autoresizesSubviews;
cloneImageView.layer.zPosition = obstacle.layer.zPosition+1;
cloneImageView.tag = numOb + 1;
numOb++;
cloneImageView.hidden = NO;
[obstacle.superview addSubview:cloneImageView];
}
- (void)moveOb{
    for (int i = 0; i <= numOb; i++){
        UIImageView *viewToAnimate = (UIImageView *)[obstacle.superview viewWithTag:i];
        viewToAnimate.center = CGPointMake(viewToAnimate.center.x, viewToAnimate.center.y + 1);
    }
}
- (void)viewDidLoad {
    obstacleTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self         selector:@selector(obTimer) userInfo:nil repeats:YES];
    obMoveTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self     selector:@selector(moveOb) userInfo:nil repeats:YES];
    obstacle.hidden = YES;
    [super viewDidLoad];
}

所以蓝色块正在下降,整个视图也是如此。这是一张图片:

【问题讨论】:

  • 可能是因为obstacle.superview 你为什么用这个?

标签: ios objective-c cocoa-touch uiimageview uikit


【解决方案1】:

这些标签可能会给您带来问题。默认情况下,UIViewtag 为 0。因此,当您调用 viewWithTag 时,您确定您得到了您想要的 obstacle 吗?

我已经多次使用标签,通常用于同一视图中的不同事物。通常为此我会 #define 一个 TAG_START_ 宏用于此目的,并将它们隔开,有点像

#define TAG_START_OBSTACLE 10000

每次我分配一个标签时,我都会使用

NSInteger tag = indexIWantToUse + TAG_START_OBSTACLE;

为了重新获得索引,

NSInteger index = tag - TAG_START_OBSTACLE;

虽然我必须说,因为我在这里没有看到obstacle 的定义,我认为有比使用obstacle.superview 更好的方法来获取容器UIView。也许UIViewControllerview 属性?里面有一个容器,或者一些IBOutlet你可以保留一个指针?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2012-04-21
    • 2023-03-20
    相关资源
    最近更新 更多