iOS:了解框架和视图

时间:2014-12-12 12:00:46

标签: ios objective-c iphone uiview uiimageview

我正在以编程方式为基于ViewController的iOS应用程序工作。我试图以编程方式这样做,因为我想了解基本概念。

我创建了UIImageView的子类,并使用图像对其进行了初始化。在初始化方法中,我还添加了第二个UIImageView,因为我想以不同的方式处理这两个,但它们是同一个对象的一部分。最终我希望能够根据设备屏幕分辨率缩放对象(以及因此2个UIImages)(例如,如果分辨率低,那么我将两个图像缩放50%)。我想这样做是因为我希望能够实现放大和缩小功能以及支持多种分辨率和屏幕布局

其他信息:

  • 这两张图片有不同的尺寸(500x500像素)和(350x350 像素)。

我的问题是:

  • 如何将第二张图像准确定位在第一张图像的中心?(我使用了主要UIImage的中心属性,但我认为我弄错了..我认为中心是广场的确切中心,但要么是我使用不正确,要么是我缺少的东西)
  • 使用这种方法是否有任何负面影响(UIView子类包含一个额外的UIView?)(例如,它是否会在应用转换算法时产生混淆?它是否会降低跑步速度?或者更简单的是它是一个糟糕的设计模式?)

here is a little example of how it should look like..

我发现很难理解第二张图像的位置。请参阅下面的代码剪辑,这是我使用的:

    CGRect innerButtonFrame = CGRectMake(self.center.x/2, self.center.y/2,innerButtonSelectedImage.size.width,innerButtonSelectedImage.size.height);

取自:

-(id) initWithImage:(UIImage *)image
{
    if(self = [super initWithImage:image]){
        //
        self.userInteractionEnabled = true;

        // Initialize gesture recognizers
        UITapGestureRecognizer *tapInView = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapInImageView:)];
        [self addGestureRecognizer:tapInView];

        UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressInView:)];
        [self addGestureRecognizer:longPress];


        // Initialize labels
        ..

        // Inner circle image
        innerButtonView = [[UIImageView alloc] init];
        innerButtonSelectedImage = [UIImage imageNamed:@"inner circle.png"];

        CGRect innerButtonFrame = CGRectMake(self.center.x/2, self.center.y/2,innerButtonSelectedImage.size.width,innerButtonSelectedImage.size.height);

        innerButtonView.frame = innerButtonFrame;
        [innerButtonView setImage:innerButtonSelectedImage];

        // Add additional ui components to view
        [self addSubview:innerButtonView];
        .. 
        [self addSubview:descriptionLabel];
    }
    return self;
}

编辑:如果我将定位代码更改为以下内容,就会出现这种情况:

CGRect innerButtonFrame = CGRectMake(0, 0,innerButtonSelectedImage.size.width,innerButtonSelectedImage.size.height);

        innerButtonView.frame = innerButtonFrame;

我也不明白为什么图像比屏幕大..因为蓝色应该是500x500像素宽,而iPhone 6的屏幕应该是1334 x 750.

enter image description here

2 个答案:

答案 0 :(得分:0)

怎么样:

CGRect innerButtonFrame = CGRectMake(0, 0, innerButtonSelectedImage.size.width,innerButtonSelectedImage.size.height);
innerButtonFrame.center = self.center;

答案 1 :(得分:0)

如果您需要500 * 500圈,则添加半圈意味着将 500 * 500 替换为 250 * 250 。小圈子用 175 * 175 取代 350 * 350 并解决您的问题。

我希望你的问题能解决..享受

谢谢..